在Flutter上创建加载页面



我有这个主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操作"错误

我需要帮助。

您在_MyAppStateinitState()方法中使用Navigator逻辑-这里,您的上下文没有定义Navigator,这基本上就是错误所解释的。导航器上下文只能在MaterialApp()下访问(因为您定义了路线,所以导航逻辑仅在那里(。

您可以通过将所有initState()逻辑移动到LoadingPageWidget来解决此问题——在那里您可以访问Navigator,因为这是您默认的第一页,所以此解决方案背后应该没有副作用。

最新更新