Как сделать sh на страницу, когда функция asyn c завершена? - PullRequest
1 голос
/ 07 августа 2020
• 1000 пользователь "щелкает" по нему.

В этом коде я фактически дал задержку в 3 секунды для запуска _login.getStoredEmail () и установил переменную внутри 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(),
          ],
        ),
      ),
    );
  }
}

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Объявить initState

  Future _future;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _future = doStuff();
  }

Использовать FutureBuilder

FutureBuilder(
      future: _future,
      builder: (_, dataSnapshot) {

        if (dataSnapshot.connectionState == ConnectionState.waiting) {
          return Center(child: CircularProgressIndicator()); // here add loading screen
        } else {
          return Dashboard();
        }
      },
    )
0 голосов
/ 07 августа 2020

Переход к другому экрану внутри метода initState ().

initState() {
  initializeAndNavigate()
}

initializeAndNavigate() async {
  await initializeSomething();
  Navigator.of(context) ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...