gpt4 book ai didi

flutter - 如何使用 Navigator 将数据传递到 Flutter 中的上一个屏幕? (需要处理所有情况 : swipe to go back, 回按等)

转载 作者:行者123 更新时间:2023-12-03 03:01:47 25 4
gpt4 key购买 nike

假设我使用 Navigator.pop 的默认方式在屏幕之间传递数据:

@override
void selectUserAction(BuildContext context) async {
final result = await Navigator.of(context).push(
MaterialPageRoute(builder: (context) => SelectUserPage()));
final User selectedUser = result as UserModel;
}

Navigator.pop(context, selectedUser);

所以在这种情况下一切顺利。

而且我知道我可以使用 AppBar 前导属性处理后退按钮交互(onPressed),如下所示:
leading: IconButton(
icon: BackButtonIcon(),
onPressed: () {
Navigator.pop(context, selectedUser);
},
),

但是我们可以返回上一个屏幕的选项很少(回到安卓,滑动回到iOS等)。
那我们应该怎么办呢?

无论如何,我都需要将数据返回到上一个屏幕。

最佳答案

当您将一个对象传递到下一页时,它是通过引用传递的。也就是说,将指针传递到该对象所在的内存位置。因此,您的两个页面都指向同一内存区域(同一个对象),对该对象的任何更改都将反射(reflect)这两个页面。这是一个例子。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Home(),
);
}
}

class Home extends StatefulWidget {
_HomeState createState() => _HomeState();
Model model1 = Model('Page 1');
}

class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("First Page")),
body: Column(
children: <Widget>[
Center(
child: RaisedButton(
child: Text("GO"),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Page2(widget.model1)),
);
},
),
),
Text(widget.model1.myInfo)
],
));
}
}

class Page2 extends StatefulWidget {
Model model2;

_Page2State createState() => _Page2State();

Page2(this.model2);
}

class _Page2State extends State<Page2> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Page 2"),
),
body: Column(
children: <Widget>[
TextField(
onChanged: (text) {
widget.model2.setNewInfo(text);
},
decoration: InputDecoration(
hintText: 'Enter a new info here',
),
),
],
));
}
}

class Model {
String myInfo;

Model(this.myInfo);
setNewInfo(String info) {
myInfo = info;
}
}

关于flutter - 如何使用 Navigator 将数据传递到 Flutter 中的上一个屏幕? (需要处理所有情况 : swipe to go back, 回按等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56636235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com