Когда ChangeNotifier предпочтительнее Observable во Flutter?

Я изо всех сил пытался понять, когда ChangeNotifier предпочтительнее Observable Rxdart или потоков в целом.

Согласно документам Flutter:

Класс, который может быть расширен или смешан, предоставляющий API уведомлений об изменениях с помощью VoidCallback для уведомлений.

ChangeNotifier оптимизирован для небольшого числа (одного или двух) слушателей. Это O(N) для добавления и удаления слушателей и O(N²) для отправки уведомлений (где N - количество слушателей).

Тем не менее, я не уверен, что ChangeNotifier может предложить, а Observable или Stream - нет.

1 ответ

Некоторые обновления с тех пор, как вы задали этот вопрос

  • Observable устарел, и вы можете просто использовать функции расширения в Stream
  • Производительность ChangeNotifier: O(1) для добавления слушателей и O(N) для удаления слушателей и отправки уведомлений.

Но я бы сосредоточился меньше на производительности и больше на сценарии использования. ValueNotifier — это более легкое решение, но не такое надежное, как Streams.

Эта ветка Reddit отлично описывает разницу в вариантах использования. Как и этот пост StackOverflow .

Но резюмируя:

  • Потоки отлично подходят для работы на уровне вашей модели/сети (или бизнес-логики).«Потоки представляют собой серию событий или фрагментов информации (от нуля до бесконечности), которые производятся из источника. Это, естественно, имеет смысл для сетевых пакетов, видеокадров, событий аналитики, отчетов об ошибках и т. д.».
  • ValueNotifier отлично подходит для передачи изменений состояния обратно в ваш пользовательский интерфейс. «Если у вас есть объект с членами, которые могут измениться, и вы хотите знать, когда изменяются некоторые или все из них, тогда все, что вам нужно сделать, это смешать ChangeNotifier внутри этого класса, а затем вызывать notifyListeners всякий раз, когда что-то изменяется».
Другие вопросы по тегам