如何在flutter中使用Navigator.pop()方法传递多个值?

时间:2019-08-06 07:12:53

标签: flutter flutter-layout

Navigator.pop方法只能返回一个值,但是我需要返回多个值。 有什么方法可以使用Navigator.pop()返回多个值?

我以前使用过Navigator.push,但是当我将多个页面中的多个变量推到一页时,会显示构造错误。

我已经被困在这里好几天了。

请帮助我。

谢谢。

6 个答案:

答案 0 :(得分:0)

创建一个包含所有数据的新数据结构类。
您也可以使用map或list,但是如果数据结构发生变化,它将成为错误的来源。

答案 1 :(得分:0)

您可以通过两种方式pop

Navigator.of(context).pop(object);

Navigator.pop(context, object);

无论哪种方式,我都用object标记了该方法的可选返回值。

如果要返回多个值,则需要将它们装在classMap或其他任何对象中。

带有类别的拳击将如下所示:

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)

简单示例:

enter image description here

您可以通过 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);