Наблюдаемые списки в трепетании с MOBX - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь создать наблюдаемый список (т. Е. Когда элемент списка изменяется, удаляется или добавляется, я хотел бы обновить пользовательский интерфейс). Я знаю, что у mobx есть нечто, называемое «observableList», и поэтому кажется, что это возможно. Однако у меня есть проблемы с его реализацией. В настоящее время в моем файле хранилища mobx есть следующий код:

var metrics = Observable([.5,.5,.5]);

Затем позже я пытаюсь изменить один из элементов следующим образом:

metrics[index] = data;

Я получаю ошибку:

Метод '[] =' не определен для класса 'Observable>'.

Есть ли способ создать наблюдаемый список (или еще лучше, наблюдаемый словарь) во флаттере, или он еще не реализован?

Спасибо!

1 Ответ

4 голосов
/ 16 января 2020

С MobX вам нужно создавать методы, отмеченные @action, чтобы получать уведомления об изменениях в Observable.

. В вашем Магазине должно быть что-то вроде

@observable
var metrics = ObservableList<int>([.5,.5,.5]);

// This is action method. You need to use this method to react
// your UI properly when something changes in your observable list.
@action
void addItem(float data) => metrics.add(data);

// the same for this method but with a different operation.
@action
void removeItem(float data) => metrics.remove(data);

В ваш пользовательский интерфейс

Observer(
 builder: (context) =>
   ListView.builder(
     itemCount: yourStore.metrics.lenght,
     builder: (_, index) => Text('${yourStore.metrics[index]}'),
  ),
);

В этом случае после некоторого изменения в yourStore.metrics наблюдаемом списке будет вызван обратный вызов Observer Builder, и представление списка будет обновлено.

...