【发布时间】:2019-08-30 09:57:11
【问题描述】:
我有这样的代码的屏幕活动,
onTap: () {
Navigator.of(context).pop('lorem ipsum');
}
所以,当我按下按钮(onTap) 时,屏幕将返回上一个活动并显示“lorem ipsum”的文本,我该怎么做?
【问题讨论】:
我有这样的代码的屏幕活动,
onTap: () {
Navigator.of(context).pop('lorem ipsum');
}
所以,当我按下按钮(onTap) 时,屏幕将返回上一个活动并显示“lorem ipsum”的文本,我该怎么做?
【问题讨论】:
基本上,如果您需要从页面 B 到 A 的结果...您需要在页面 A 中期待它
例如...
你有一个转到页面 B 的按钮,那么你需要下一个代码:
String informationFromPageB = await Navigator.push(
context,
MaterialPageRoute(
builder: (_) => PageB(),
);
然后在页面B中,发送参数就行了
Navigator.pop(context, "theInformationHere");
这里有一个例子:https://flutter.dev/docs/cookbook/navigation/returning-data
我还做了另一个小例子:https://dartpad.dev/f13ca924e567674d872dc45662483941
【讨论】:
像这样试试。
1) 在第一页(转到第二页/活动)
Future _buttonTapped() async {
Map results = await Navigator.of(context).push(new MaterialPageRoute<dynamic>(
builder: (BuildContext context) {
return new SelectionPage();
},
));
if (results != null && results.containsKey('selection')) {
setState(() {
_selection = results['selection'];
});
}
}
2) 在第二页中(从您要传递值的地方)
onTap: () {
String value = "lorem ipsum";
Navigator.of(context).pop({'selection':value});
}
Here 是一个很好的例子,说明了如何将值传递给上一个活动。
【讨论】:
有一个包可以传递一些参数,比如 url params https://github.com/theyakka/fluro
router.define("/users/:id", handler: usersHandler);
【讨论】:
在你的第一个屏幕中使用这个(当你想去 Screen2 时)
Navigator.push(context, MaterialPageRoute(builder: (context) => Page2()))
.then((string) {
// string here is lorem ipsum
});
当你回到第一个屏幕时,在你的第二个屏幕上,使用这个
Navigator.pop(context, 'lorem ipsum');
【讨论】:
Navigator.push() 当您转到屏幕 2 时,应该在屏幕 1 中使用,也许您正在为此使用按钮。如果没有,请告诉我您是如何导航到屏幕 2 的?
您可以使用popAndPushNamed 并将您的文本添加为参数
Navigator.popAndPushNamed(context, '/yourRoute', arguments: 'your text' );
【讨论】:
首先在flutter中,Activity这个词没有被使用。一切都是Widget。
当您推送到此屏幕时,您必须推送MaterialRouteWidget,其参数应与pop的结果(在您的情况下为字符串)相同,如下所示-
new RaisedButton(onPressed: ()async{
String value = await Navigator.push(context, new MaterialPageRoute<String>(
builder: (BuildContext context) {
return new Center(
child: new GestureDetector(
child: new Text('OK'),
onTap: () { Navigator.pop(context, "lorem ipsum"); }
),
);
}
)
);
print(value);
},
child: new Text("Return"),)
如需正确理解,请转至this。
【讨论】: