【发布时间】:2019-08-28 02:39:48
【问题描述】:
Navigator.of(context).pop 和 Navigator.pop(context) 有什么区别?
对我来说,两者似乎都做同样的工作,实际区别是什么。一个被弃用了吗?
【问题讨论】:
Navigator.of(context).pop 和 Navigator.pop(context) 有什么区别?
对我来说,两者似乎都做同样的工作,实际区别是什么。一个被弃用了吗?
【问题讨论】:
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) 来关闭对话框。
【讨论】:
两者没有区别,源代码证实了这一点。调用
Navigator.pop(context)
实际调用
Navigator.of(context).pop()
源代码:
static bool pop(BuildContext context, [ dynamic result ]) {
return Navigator.of(context).pop(result);
}
【讨论】:
Navigator.of(context).pop 应该是 Navigator.of(context).pop()。这可能是问题所在。