我正在开发一个应用程序,当用户进入第一个屏幕时是一个加载屏幕,在该屏幕上可以从提供程序初始化某些内容,用户无法在此屏幕中输入任何内容,加载完成后,我想推送一个新屏幕,而无需用户“点击”它。
在这段代码中,我实际上为_login.getStoredEmail()运行并设置了3秒的延迟,并在LoginController内设置了一个变量,该变量将在下一个屏幕中使用,但是每次都无法正常工作,最终会中断。

class GeneralSplashScreen extends StatefulWidget {
  @override
  _GeneralSplashScreenState createState() => _GeneralSplashScreenState();
}

class _GeneralSplashScreenState extends State<GeneralSplashScreen> {
  @override
  void initState() {
    Future.delayed(
      Duration(
        seconds: 3,
      ),
      () {
        Navigator.pushReplacementNamed(context, kRoutes.login);
      },
    );
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final LoginController _login = Provider.of<LoginController>(context);

    _login.getStoredEmail();

    return Scaffold(
      body: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 60),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Image.asset(
              'lib/assets/images/logo.png',
              fit: BoxFit.contain,
            ),
            Text(
              "Business Mananger",
              textAlign: TextAlign.end,
              style: TextStyle(
                fontFamily: kFontFamily.montserrat,
                fontSize: 10,
              ),
            ),
            LoadingBar(),
          ],
        ),
      ),
    );
  }
}

最佳答案

导航到initState()方法内的其他屏幕。

initState() {
  initializeAndNavigate()
}

initializeAndNavigate() async {
  await initializeSomething();
  Navigator.of(context) ...
}

关于flutter - 异步功能完成后如何推送到页面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63301909/

10-10 07:22