在内存中的应用程序恢复上显示pincode屏幕[在不包含Navigator的上下文中请求的Navigator操作。]

时间:2019-02-15 05:16:42

标签: dart flutter onresume

我想在所有已登录用户的应用简历上显示PinCode

所以我检查了是否有WidgetsBindingObserver

并像这样使用它:

new GetAllStudentWithSameNameAsyncTask(studentDao).execute(studentName).get();

这里的问题是,如果用户将应用程序放置在内存中并返回(onResume),事件将触发正确,但是我会收到此错误

  

E / flutter(22097):[错误:flutter / lib / ui / ui_dart_state.cc(148)]   未处理的异常:请求的导航器操作具有上下文   不包括导航器。   E / flutter(22097):用于   来自导航器的推入或弹出路径必须是以下窗口小部件的路径:   导航器小部件的后代。

这意味着用户不处于我所想/所理解的当前状态(如果我错了,请纠正我),但是那是怎么回事?

是的,即使在启动屏幕中,用户也位于应用程序的某个位置,但存在相同的错误

1 个答案:

答案 0 :(得分:0)

使用natigator Key可能会帮助您推送新路线,而不是构建上下文。

class _AppState extends State<App> {
  final GlobalKey<NavigatorState> navigatorKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      navigatorKey: navigatorKey,
      home: new Scaffold(
        appBar: AppBar(),
        body: new Center(),
      ),
    );
  }
}

现在是方法

 @override
  Future didChangeAppLifecycleState(AppLifecycleState state) async {
    if (state == AppLifecycleState.resumed &&
        await auth.isLoggedIn() == true) {
      Navigator.push(navigatorKey.currentContext,
        MaterialPageRoute(
          builder: (_) => PinCode(),
        ),
      );
    }
    super.didChangeAppLifecycleState(state);
  }

这可能有助于在恢复应用后导航新页面。