setState () или markNeedsBuild () вызывается>, когда дерево виджетов было заблокировано. при изменении состояния - PullRequest
1 голос
/ 07 марта 2019

Пожалуйста, посмотрите на мой код:

class HomePageState extends State<HomePage> {
  bool _isLoading = false;

.....

  @override
  Widget build(BuildContext context) {

    var drawerOptions = <Widget>[];
    ......

    drawerOptions.add(new ListTile(
        leading: new Icon(Icons.account_balance),
        title: new Text(Strings.menu_change_city),
        onTap: () => createDialog()
    ));


    if(_isLoading) return buildBusyForm();

    return Scaffold( .... //window content
  }

}

Итак, у меня есть навигационный ящик.Один элемент («Выбрать город») не закрывает блок навигации, он отображает диалоговое окно выбора города:

createDialog() {

    setState(() {_isLoading = true;});

    fetchCities().then((response) {

      setState(() {_isLoading = false;});

      showDialog(
          context: context,
          builder: (context) => CityChoiceDialog<City>(
              title: Text(Strings.menu_change_city),
              items: response,
              initialValue: response.firstWhere((c) => c.id == globals.cityId, orElse: () => new City()),
              itemBuilder: (City city) => Text(city.name),
              onSelected: _onSelected,
              onSubmitted: _onSubmitted));
    });
  }

Таким образом, в основном он предназначен для отображения формы занятости, загрузки городов, а затем скрытия формы занятости и отображения списка городов.диалог.Похоже, что работает, я получаю исключение:

I / flutter (10662): ══╡ ИСКЛЮЧЕНИЕ ВЫДЕЛЕНО БИБЛИОТЕКОЙ ВИДЖЕТОВ ╞═══════════════════════════════════════════════════════════ I / трепетание (10662): при финализации дерева виджета было выдано следующее утверждение: I / flutter (10662): setState () или markNeedsBuild () вызывается, когда дерево виджетов было заблокировано.I / flutter (10662): Этот виджет _ModalScope не может быть помечен как нуждающийся в сборке, поскольку среда I / flutter (10662) заблокирована.I / flutter (10662): виджет, для которого были вызваны setState () или markNeedsBuild (), был: I / flutter (10662):
_ModalScope- [LabeledGlobalKey <_ModalScopeState> # 1f222] (состояние: I / flutter (10662)): _ModalScopeState # 6c40b)

Как правильно делать то, что я хочу?

1 Ответ

0 голосов
/ 07 марта 2019

Эта ошибка означает, что вы вызываете setState во время фазы сборки, что вы не можете сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...