【问题标题】:Flutter Navigator.of(context).pop vs Navigator.pop(context) differenceFlutter Navigator.of(context).pop 与 Navigator.pop(context) 的区别
【发布时间】:2019-08-28 02:39:48
【问题描述】:

Navigator.of(context).popNavigator.pop(context) 有什么区别?

对我来说,两者似乎都做同样的工作,实际区别是什么。一个被弃用了吗?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    Navigator.push(context, route) vs Navigator.of(context).push(route)

    Navigator 用于管理应用程序的页面堆栈(路由)。将给定的路由推送到屏幕(Navigator)时,我们需要获取正确的Navigator然后推送。

    Navigator.of(context).push(route) 拆分 .of(context) 以获得正确的导航器和 .push(route)Navigator.of(context) 具有可选参数,如果 rootNavigator 设置为 true,则改为给出最远的 NavigatorState。

      static NavigatorState of(
        BuildContext context, {
        bool rootNavigator = false,
        bool nullOk = false,
      })
    

    Navigator.push(context, route) 是一种静态方法,可以同时执行这两种方法。它在内部调用Navigator.of(context).push(route)。导航器最紧密地包围了给定的上下文。

    static Future<T> push<T extends Object>(BuildContext context, Route<T> route) {
        return Navigator.of(context).push(route);
    }
    

    pop() 类似于push()

    当多个 Navigator 嵌套在 App. showDialog(...) 方法创建的对话路由被推送到根导航器。如果应用程序有多个 Navigator 对象,则可能需要调用 Navigator.of(context, rootNavigator: true).pop(result) 而不仅仅是 Navigator.pop(context, result) 来关闭对话框。

    【讨论】:

    • “最紧密地包围给定上下文的导航器”是什么意思?
    【解决方案2】:

    两者没有区别,源代码证实了这一点。调用

    Navigator.pop(context)
    

    实际调用

    Navigator.of(context).pop()
    

    源代码:

    static bool pop(BuildContext context, [ dynamic result ]) {
      return Navigator.of(context).pop(result);
    }
    

    【讨论】:

    • @pskink 很有趣,他展示了一个工作代码,但源代码拒绝了。
    • @CopsOnRoad 实际上我没有运行他的代码:我相信我的眼睛(或者我在上面链接的那一行简单的代码中可能有一些我不理解的东西......)
    • @pskink 即使我没有运行它,我也认为没有区别,但如果 OP 提到这意味着会有一些。
    • 您在第一个示例中没有调用 pop 方法。 Navigator.of(context).pop 应该是 Navigator.of(context).pop()。这可能是问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多