Кнопка onPressed asyn c метод с 2 setState - PullRequest
0 голосов
/ 30 апреля 2020

Не могу понять, почему 2 setState в asyn c onPressed метод вызывает ошибку

Необработанное исключение: setState () вызывается после dispose (): _LoginScreenState # 0eb2 c (жизненный цикл) состояние: не работает, не смонтировано)

Вот мой код

 RaisedButton(
      child: Text('Login'),
      onPressed: emailController.text == "" || passwordController.text == ""
          ? null
          : () async {
              setState(() {
                _isLoading = true;
              });
              SharedPreferences prefs =
                  await SharedPreferences.getInstance();
              prefs.setString('email', emailController.text);
              try {
                await Provider.of<Auth>(context, listen: false)
                    .signIn(emailController.text, passwordController.text);
              } on HttpException catch (error) {
                exceptionAlertDialog(context, error.toString());
              } catch (error) {
                exceptionAlertDialog(context, error.toString());
              }
              setState(() {
                _isLoading = false;
              });
            },
    )

как только isLoading верен, я отображаю счетчик .. Ничего экстраординарного

body: Container(
        alignment: Alignment.center,
        child: _isLoading
            ? Center(child: CircularProgressIndicator())
            : ListView(
                children: <Widget>[textSection(), buttonSection()],
              ),
      ),

Все работает нормально, если я закомментирую эти 2 состояния в кнопке onPressed.

1 Ответ

1 голос
/ 30 апреля 2020

попробуй поставить isLoading для утилизации

  @override
  void dispose() {
    _isLoading = false;
    super.dispose();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...