我想在所有已登录用户的应用简历上显示PinCode
所以我检查了是否有WidgetsBindingObserver
并像这样使用它:
new GetAllStudentWithSameNameAsyncTask(studentDao).execute(studentName).get();
这里的问题是,如果用户将应用程序放置在内存中并返回(onResume),事件将触发正确,但是我会收到此错误
E / flutter(22097):[错误:flutter / lib / ui / ui_dart_state.cc(148)] 未处理的异常:请求的导航器操作具有上下文 不包括导航器。 E / flutter(22097):用于 来自导航器的推入或弹出路径必须是以下窗口小部件的路径: 导航器小部件的后代。
这意味着用户不处于我所想/所理解的当前状态(如果我错了,请纠正我),但是那是怎么回事?
是的,即使在启动屏幕中,用户也位于应用程序的某个位置,但存在相同的错误
答案 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);
}
这可能有助于在恢复应用后导航新页面。