【问题标题】:How to return data when back to previous activity?返回上一个活动时如何返回数据?
【发布时间】:2019-08-30 09:57:11
【问题描述】:

我有这样的代码的屏幕活动,

onTap: () { 
   Navigator.of(context).pop('lorem ipsum');
}

所以,当我按下按钮(onTap) 时,屏幕将返回上一个活动并显示“lorem ipsum”的文本,我该怎么做?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    基本上,如果您需要从页面 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

    【讨论】:

      【解决方案2】:

      像这样试试。

      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 是一个很好的例子,说明了如何将值传递给上一个活动。

      【讨论】:

        【解决方案3】:

        有一个包可以传递一些参数,比如 url params https://github.com/theyakka/fluro

        router.define("/users/:id", handler: usersHandler);

        【讨论】:

          【解决方案4】:

          在你的第一个屏幕中使用这个(当你想去 Screen2 时)

          Navigator.push(context, MaterialPageRoute(builder: (context) => Page2()))
              .then((string) {
                // string here is lorem ipsum
          });
          

          当你回到第一个屏幕时,在你的第二个屏幕上,使用这个

          Navigator.pop(context, 'lorem ipsum');
          

          【讨论】:

          • 我必须把 Navigator.push(.... ? in class _Page1 extends State 或 ?...
          • Navigator.push() 当您转到屏幕 2 时,应该在屏幕 1 中使用,也许您正在为此使用按钮。如果没有,请告诉我您是如何导航到屏幕 2 的?
          • 我用这个,return new GestureDetector( onTap: () async { Navigator.pop(context, 'lorem ipsum'); }) 所以,之前屏幕上的文字会改变
          • 不,我问你如何进入使用你提到的代码的第二个屏幕?
          【解决方案5】:

          您可以使用popAndPushNamed 并将您的文本添加为​​参数

          Navigator.popAndPushNamed(context, '/yourRoute', arguments: 'your text' );
          

          【讨论】:

            【解决方案6】:

            首先在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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-12-05
              • 2011-05-01
              • 1970-01-01
              相关资源
              最近更新 更多