Информация
- В рейтинге
- Не участвует
- Откуда
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Разработчик мобильных приложений, Разработчик приложений
Ведущий
От 450 000 ₽
ООП
SOLID
Dart
Flutter
Разработка под Android
Kotlin
Java
Swift
Разработка мобильных приложений
Android SDK
закрепить на газлифте можно, но конструкция нежёсткая в силу дизайна и скорее, да, для ноубуков
у меня есть газлифт, но монитор я отдал при переезде, думаю побробовать позже
Мне нравится работать стоя, но устаёт спина и ноги. Я долго выбирал между коленным стулом для и стулом-седлом, в итоге прикупил вот такое рабочее место.
Подставка по ноги наклоняется, вся конструкция подпружинена и позовляет покачиваться.
Ноги разгружены и спина тоже.
Работаю чуть больше месяца и очень доволен
Статический анализатор покажет что событие не в тот блок добавляем, здесь всё как с обычным блоком
тут дело вкуса и сложно вынести из беседы в коментах какой либо артефакт =) предлагаю остановиться =)
Я переиспользую только Input ивенты в FormBloc — сами ивенты только меняют свой инпут в стейте и более ничего — вряд ли что-то сильно измениться =)
Не согласен, coupling/cohesion применимы к модулям. В разрезе Event/Bloc классы ивентов и класс блока — это один модуль и они поумолчанию тесно связаны(coupling) «ивенты конкретного блока». Это сильно связанные классы для реализации одной какой-то логики/компонента.
Про зацепление(cohesion). Если бы я в Event/Bloc засылал BuildContext — это действительно было бы сильным зацеплением на Flutter framework, но такое разумеется пресекается.
debounce сложной/долгой операции — это не логика фичи, это ограничения для жизни в реальной среде с нагрузками на сеть/cpu. Поэтому debounce делаю в Bloc.transformEvents разделяя Event и _DebouncedEvent, последний выполняет долгую/сложную/нагрузо_нежалательную операцию
Про Команду
Если у команды есть нагрузка(ex. user input), то без класса сложно обойтись и как раз нагрузку в конструктор и укладываю, а сигнатура метода выполнения остаётся неизменной.
Про несогласие о нарушении SRP…
Ивенты блока и сам блок — это один компонент логики Business Logic Component, который вполне себе отдельный software module.
Нарушен SRP если этот модуль могут попросить изменить к примеру и Аналитик, и UX'ксер
Хабр статья про SOLID
Ссылка на оригинал SRP от R. C. Martin
Посему не считаю SRP нарушенным =)
ps я как раз такого избегаю
Про кодген — чаще в командах начинающие ребята и это накладывает ограничения.
Я использую свой подход к ивентам — делегировал им исполнение, получилось скрещение паттернов Состояние и Команда(ивенты у нас инстансы команд по сути)
каждый ивент имплементит метод,
текущий стейт специально добавлен чтобы не пользовать геттер bloc.state и получить доступ к стейту
Получается bloc является контекстом паттерна состояния и содержит только зависимости
А BaseBloc делегирует исполнение ивентам, по сути являясь диспатчером очереди команд
Плюсы
В 2ух словах так)
Есть комент к…
noSuchMethod актуален только при вызове на dynamiс, вызвать любой метод на null невозможно и нет никакой связи с Java NPE
Собственно прошу объяснить, вдруг это у меня лыжи не едут, либо поправить статью =)
За статью спасибо!
минусатор, есть аргументированные возражения этому коменту?
Наружу только Observable или Stream, потому что я могу миновать incrementCounter() и сунуть туда какое захочу value и оно минует вашу логику
Это как раз вопрос велосипеда, он уже несостоятелен и его приходится рихтовать.
Зачем здесь async функция?
FutureincrementCounter()asyncЯ вношу вклад в сообщество помогая в чатике и критикуя явные проблемы, особенно если это публичная статья для новичков с грубыми ошибками.
BLoC & MVI смысл один один поток на вход, один на выходе
+ предсказуемый стейт
Вы пишете свой велосипед, который может потерять этот +, если не один единственный поток на вход(очередь событий)
Почитайте про синдром NIH
Жду статью про велосипед дериватив MVU(TEA), Redux, MVI, BLoC
UDF + Rx
Как тебе угодил MVI, но не угодил BLoC?
Intent -> Model -> View
Event -> State -> View
эквивалентные вещи и через тот же Rx
Вы в статье против BLoС, но вы не в курсе что flutter_bloc — это дериватив MVU(родоначальник подхода ELM TEA)
guide.elm-lang.org/architecture
MVI это то же дериватив MVU и бойлерплейта там тоже много
flutter_bloc, MVU(TEA), Redux, MVI эквивалентны (просто разные реализации)
Получается что пчёлы против мёда и ваши статьи противоречят вашему же коментарию выше
ошибки обозначены и описаны, показано что надо изменить.
Не нагнетайте
убери из конструктора
убери из StreamBuilder'а
api.flutter.dev/flutter/widgets/StatelessWidget-class.html
api.flutter.dev/flutter/widgets/StatelessWidget/build.html
Не зная первой цитаты ты стреляешь себе в ногу в будущем(ближайшем)
Не зная второй цитаты ты опираешься на внешние данные, полностью перечя ей(upd тут я неправ)Ты не читал документацию или не перечитал с пониманием
Ошибки
1. инициализация значения в BehaviorSubject не через named конструктор .seeded(initValue)
2. эта ошибка вытекла из первой, но показала непонимание основ Flutter.
Нельзя ничего инициировать в методе build() любого типа виджета