Привет! Занимаюсь разработкой библиотеки WStore - это Flutter библиотека для управлением состоянием виджетов.
Зачем она понадобилась? Есть же Bloc, Redux, GetX... В чём проблема?
Проблема 1: Нужно писать очень много кода для простых вещей
Нужно эммитить события, делать их обработчики, оборачивать всё в стримы за которыми потом следить - подписываться, отписываться... Мне нужно просто цифру на экране обновить!!! Вы чего?
Проблема 2: Нужно погружаться в абстракции на которых это работает
Есть эммитер, есть консьюмер, есть редьюсер, актионс. Есть всякие синки, контроллеры, стримы, лиссенеры, эвенты. Есть ещё стейты (не путать со стейтами виджетов!)... Да вы охренели что ли?
Проблема 3: Сложна! Сложна!! Сложна!!!
Какого хрена это так сложно? Вас в детстве менторы не учили сложность прятать внутрь? Нет, я конечно понимаю, когда ты это всё освоил - можно ходить и упиваться чувством собственной важности. Можно еще на это всё сверху генератор кода накинуть - ещё красивее будет. {Сарказм}
Есть ли свет в конце?
В то же время мне нравится идеология Flutter - концепция виджетов, концепция стейтлесс и стейтфул, концепция билдеров. В стейтфул виджете всё ведь просто - вот переменная с текстом, вот мы её выводим, вот мы её меняем и вызываем setState и всё обновилось! Никаких сложностей! Никаких потоков с эммитерами событий. Почему так не сделать для всего экрана? И вот в этом самом месте и зародился WStore.
Идея проста до безобразия - создаем стору, в этой сторе переменную, переменную передаем в билдер который будет за ней смотреть, когда переменная изменилась делаем setStore и те и только те билдеры которые за ней смотрят изменились. Да, банальный нотифай-лисенер только за тем исключением что в сторе может быть много разных переменных и билдеры следят только за изменением своих переменных, а не ребилдятся при каждом изменении сторы:
Сверху получается простой и понятный интерфейс, а все сложности с подписками, стримами, инхеретед-виджетами спрятаны глубоко внутри подальше от неокрепших умов.
Такой подход открыл много возможностей, о которых я напишу в другой раз ;)