我有这个主dart文件
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
MainController().init().then((value) {
if(Version().canUpdate()) {
Navigator.pushReplacementNamed(context, '/update');
}
MainController().getAccountInfos((datas) {
if(datas["auth"]) {
Navigator.pushReplacementNamed(context, '/');
}
else {
Navigator.pushReplacementNamed(context, '/login');
}
});
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: new ThemeData(
scaffoldBackgroundColor: ColorPalette.primary
),
initialRoute: "/loading",
routes: {
'/': (context) => MainMenuWidget(),
'/login': (context) => LoginWidget(),
'/register': (context) => RegisterWidget(),
'/keys': (context) => KeysPageWidget(),
'/update': (context) => UpdatePageWidget(),
'/loading': (context) => LoadingPageWidget(),
},
);
}
}
并且我尝试在应用程序初始化之前更改页面期间显示加载视图。
事实上,我有一个";使用不包括Navigator的上下文请求的Navigator操作"错误
我需要帮助。
您在_MyAppState
、initState()
方法中使用Navigator
逻辑-这里,您的上下文没有定义Navigator,这基本上就是错误所解释的。导航器上下文只能在MaterialApp()
下访问(因为您定义了路线,所以导航逻辑仅在那里(。
您可以通过将所有initState()
逻辑移动到LoadingPageWidget
来解决此问题——在那里您可以访问Navigator,因为这是您默认的第一页,所以此解决方案背后应该没有副作用。