Navigator.pop
方法只能返回一个值,但是我需要返回多个值。
有什么方法可以使用Navigator.pop()
返回多个值?
我以前使用过Navigator.push
,但是当我将多个页面中的多个变量推到一页时,会显示构造错误。
我已经被困在这里好几天了。
请帮助我。
谢谢。
答案 0 :(得分:0)
创建一个包含所有数据的新数据结构类。
您也可以使用map或list,但是如果数据结构发生变化,它将成为错误的来源。
答案 1 :(得分:0)
您可以通过两种方式pop
:
Navigator.of(context).pop(object);
或
Navigator.pop(context, object);
无论哪种方式,我都用object
标记了该方法的可选返回值。
如果要返回多个值,则需要将它们装在class
或Map
或其他任何对象中。
带有类别的拳击将如下所示:
class BoxedReturns{
final int a;
final int b;
BoxedReturns(this.a, this.b);
}
//stuff
Navigator.of(context).pop(BoxedReturns(1,2));
您可以使用地图来做类似的事情,尽管我更喜欢使用类方法:
Navigator.of(context).pop({"a":1,"b":2});
答案 2 :(得分:0)
类似的问题Flutter Back button with return data。
Deepak Thakur的代码片段
class DetailsClassWhichYouWantToPop {
final String date;
final String amount;
DetailsClassWhichYouWantToPop(this.date, this.amount);
}
void getDataAndPop() {
DetailsClassWhichYouWantToPop detailsClass = new DetailsClassWhichYouWantToPop(dateController.text, amountController.text);
Navigator.pop(context, detailsClass); //pop happens here
}
new RaisedButton(
child: new Text("Edit"),
color: UIData.col_button_orange,
textColor: Colors.white,
onPressed: getDataAndPop, //calling pop here
),
答案 3 :(得分:0)
要能够通过Navigator.pop()
返回多个值,您可以做两件事(当然,还有更多的方法,但这是一些基本的方法):
1。创建一个包含这些数据的模型:
class YourClass {
String firstVar;
String secondVar;
int thirdVar;
News(
{this.firstVar,
this.secondVar,
this.thirdVar});
}
在视图中要使用Navigator.pop()
返回数据的位置:
...
Navigator.pop(context, YourClass('test', 'test2', '1'));
2。使用Map
来保持嵌套(在我的情况下是Tupel):
...
Map<String, int> myData = new Map();
myData['test'] = 1;
myData['test2'] = 2;
Navigator.pop(context, myData);
答案 4 :(得分:0)
简单示例:
您可以通过 result 参数发送自定义对象。
推送到新屏幕并从中获取结果: 导航到新屏幕,等待 then()或 complete()事件发生。
pushToNewScreen() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => NewScreen()),
).then((value) {
// if value is true you get the result as bool else no result
if (value != null && value == true) {
print('Do something after getting result');
} else {
print('Do nothing');
}
});
}
发生某些事件时从新屏幕获取数据
ontap: (){
// pass your custom object inlace of bool value
Navigator.pop(context, true);
}
答案 5 :(得分:0)
您可以使用地图
final data = { "key1" : "value1", "key2" : "value2" };
Navigator.of(context).pop(data);