【问题标题】:How to passing a list with Navigator.pop() in flutter/dart?如何在颤振/飞镖中使用 Navigator.pop() 传递列表?
【发布时间】:2021-06-27 06:10:36
【问题描述】:

这是我的第二个屏幕代码,希望将列表传递到第一个屏幕。我的问题是如何在第一个屏幕中获取我的列表? 第二屏代码:

static List<dynamic> att = [];
Navigator.of(context).pop(att);

我应该在第一个屏幕上做什么以及如何获取我的列表?

【问题讨论】:

  • Navigator.pop(context, att);请试试这个。可能会解决您的问题
  • @MuhammadTame​​emRafay 我获取数据的页面怎么样?我该怎么办?
  • 在第一页上,您必须等待第二页的响应。 final res = await Navigator.push( context, MaterialPageRoute(builder: (context) => SecondScreen()), );

标签: android ios flutter dart


【解决方案1】:

要从第二个屏幕取回数据,您需要像这样传递属性:

static List<dynamic> att = [];
Navigator.pop(context, att);

现在在屏幕上,您正在向堆栈推送一条路线,您需要在使用 Navigator.push 的任何地方捕获弹出变量,如下所示:

final result = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => SecondScreen()),
    );

现在您已从屏幕返回数据,您也可以在此处刷新屏幕(在 await 调用下方设置状态)。如果您使用按钮来推动,请确保您在 onpressed 上使用异步。

有关其工作原理的分步详细信息,请参阅:Article

【讨论】:

    【解决方案2】:

    在第一个屏幕上用动态变量调用它并等待结果。

    dynamic result = await Navigator.pushNamed(context, '/{{routename}}');
    

    然后当您弹出第二个屏幕时,按如下方式返回地图中的值:

     static List<dynamic> att = [];
     Navigator.pop(context, {
        'list': att,
     });
    

    弹出第二个屏幕后,可以通过result 变量访问返回的列表。

    【讨论】:

    • 我的代码有问题。 未处理的异常:在 _WidgetsAppState 中找不到路由 RouteSettings("/{{routename}}", null) 的生成器。确保您的根应用小部件提供了一种生成此路由的方法。 @OshadaPalitharathna
    • @AshkanAA 你读过flutter.dev/docs/cookbook/navigation 吗?它有很多关于如何使用 navigator API 的示例
    • 是的,我做到了,但没有得到任何东西。 @pskink
    • @AshkanAA 它有一个名为:Return data from a screen 的链接
    • 要使用Navigator.pushNamed(context, '/{{routename}}'),您需要在main.dart 文件中定义一个路由器。或者创建一个连接每个屏幕的路由器,并在main.dart 中调用它。作为替代方案,您可以使用以下内容:dynamic result = await Navigator.push(context, secondScreenName());
    猜你喜欢
    • 2020-08-12
    • 2020-11-28
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2018-09-10
    • 1970-01-01
    相关资源
    最近更新 更多