Когда 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 всякий раз, когда что-то изменяется».