【问题标题】:Create a loading page on Flutter在 Flutter 上创建加载页面
【发布时间】:2021-08-11 13:07:27
【问题描述】:

我有这个主要的 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(),
      },
    );
  }
}

我尝试在更改页面之前的应用程序初始化期间显示加载视图。

实际上,我有一个“使用不包含导航器的上下文请求的导航器操作”。错误。

我需要帮助。

【问题讨论】:

  • 您好。你实际上面临什么问题?

标签: flutter routes loading init navigator


【解决方案1】:

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

您可以通过将所有 initState() 逻辑移动到 LoadingPageWidget 来解决此问题 - 在那里您可以访问导航器,因为它是您的默认首页,所以此解决方案应该没有副作用。

【讨论】:

  • 谢谢,我想我会这样解决
  • 太棒了!如果这有帮助,请不要忘记将答案标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 2014-05-11
相关资源
最近更新 更多