Я хочу изменить статус флажка с помощью использования Mobx, после щелчка значение изменилось, но не обновилось в пользовательском интерфейсе, Observer не видит действия изменения, которое он перестраивает этот виджет в файле Mobx:

  @observable
  List<bool> statusCheckbox = List<bool>();

  @computed
  List<bool> get getStatusCheckBox {
  return statusCheckbox;
 }

 @action
 changeStatusItem(bool val, int index) {
 statusCheckbox[index] = val;
 }

В файле содержится виджет:

Observer(
                 name: 'ListHomePage',
                 builder: (BuildContext context) {
                 return  child: GridView.builder(
                              gridDelegate:
                                  new SliverGridDelegateWithFixedCrossAxisCount(
                                crossAxisCount: 3,
                                childAspectRatio: (itemWidth  / itemHeight),
                              ),
                              itemCount:
                              _userManagementStore.userAPI.users.length,
                              itemBuilder: (context, index) {
                                UserManagement user =
                                _userManagementStore.getUser(index: index);
                                return AnimationConfiguration.staggeredGrid(
                                  position: index,
                                  duration:
                                      const Duration(milliseconds: 375),
                                  columnCount: 2,
                                  child: Container(
                                    child: ScaleAnimation(
                                      child: GestureDetector(
                                        child: Stack(
                                          children: <Widget>[
                                             Align(
                                              alignment: Alignment.topRight,
                                              child: Checkbox(
                                                value: _userManagementStore.getStatusCheckBox[index],
                                                onChanged: (bool val) {

                             _userManagementStore.changeStatusItem(val, index);

                                                },
                                              ),
                                            ),
                                          ],
                                        ),
                  },
                )

Я не могу найти основную причину проблемы

0
Phuc Nguyen 16 Апр 2020 в 09:30
Зачем вам @computed свойство? В нем вообще нет вычислений, просто возвращается наблюдаемое значение. Какой в ​​этом смысл? В любом случае, возможно ли предоставить какую-то песочницу кода, чтобы воспроизвести проблему.
 – 
Antoan Elenkov
16 Апр 2020 в 13:46

1 ответ

Как сказал Антоан Еленков, вы должны удалить свойство @computed. Но ваша главная проблема заключается в том, что вы должны использовать не List, а ObservalbleList, он работает как List. Итак, вы должны заменить

  List<bool> statusCheckbox = List<bool>();

От

  @observable
  ObservableList<bool> statusCheckbox = ObservableList();

0
duduf 22 Апр 2020 в 01:06