Flutter с нуля до профи | #-10 Bloc, Equatable стейт менеджмент №2 | Курс для начинающих 2023

preview_player
Показать описание
Flutter - это идеальный инструмент, чтобы начать путь в айти или перейти на него в 2023. А я как раз тот самый коуч, которого ты искал.

Ура! Наконец-то BLoC 😅.
В этом уроке мы познакомимся с самым популярным и самым продуманным стейт-менеджментом для Flutter приложений - BLoC'ом. Узнаем как работает BLoC, как построен его жизненный цикл. Как работает BlocBuilder. Как обрабатывать ошибки в ваших блоках логики. И прикрутим это все к нашему крипто-приложению.

Плюс разберемся с тем, как работает уникальность стейтов и евентов. Как работать с пакетом Equatable. Как сделать код блоков более перформансным. Как не перестраивать экран постоянно.

В ходе курса, мы вместе разберемся с тем, что такое Flutter и как на нем сделать первое приложение. Научимся программировать на dart, узнаем про основные виджеты в Flutter, как работать с сетью http dio, узнаем про основной стейт менеджемнт в Flutter - BLoC.

✅ Полезные ссылки:

Ссылки из видео:

00:00 - 00:23 Вступление
00:23 - 02:54 Делаем удобный экран ошибки с retry
02:54 - 04:51 Перегрузка данных Pull to refresh (RefreshIndicator)
04:51 - 07:10 Как понять что event отработал? Completer
07:10 - 07:38 Как работает Completer и когда стоит его использовать
07:38 - 08:38 Уникальность стейтов и эвентов
08:38 - 09:59 Как не перезагружать каждый раз экран
09:59 - 11:29 Equatable пакет для проверки equality объектов
11:29 - 12:11 Абстрактные ивенты и стейты
12:11 - 14:16 Работаем с Equatable, props
14:16 - 14:58 Оператор equality и как работает Equatable
14:58 - 16:17 Продолжаем работать с Equatable
16:17 - 17:19 Тестируем магию которая у нас получилась
17:19 - 18:10 Когда использовать Equatable, freezed
18:10 - 19:18 В чем плюсы стейт-менеджмента BLoC и когда его нужно использовать ?
19:18 - 20:02 Что будет в следующем уроке

#войтивайти #программирование #flutter
Рекомендации по теме
Комментарии
Автор

как круто ты всё объясняешь! Сколько уже посмотрел уроков, всё были максимально интересными и актуальными, без всякой воды. Сейчас прохожу стажировку в компании, и на реальном проекте понимаю, насколько ценные советы и знания ты даёшь!
Спасибо большое!

John_
Автор

Добрался до 10 урока! И тоже готов оставить несколько слов от себя. Это тот редкий случай когда я благодарен YouTube за то, что в рекомендациях оказалось видео Стаса. Все толково, все по делу. А главное, вещает практикующий разработчик это заметно;) А что остается мне, дойдя до 10 урока понимаю, что пройдено достаточно материала и пора бы его повторить. Поэтому возвращаюсь к первым урокам и вдумчиво повторяю пройденный материал. Очень хочется запилить какой-то пет-проект, руки так и чешутся, но по опыту знаю лучше не спешить.  PS:  мой нынешний стэк (PHP, JavaScript, Kotlin). Спасибо за уроки Стас!

victorsokoluik
Автор

Впервую очередь - огромное спасибо за такие уроки! Вошёл во Flutter по вашим видео)
А вот касаемо блока - мнение неоднозначное.
Полгода активно занимаюсь разработкой на Flutter и блоком никогда не пользовался (проекты свои, поэтому принудительно сталкиваться не пришлось). Сейчас пересмотрел это видео, с целью разобраться и начать использовать, но не нашел практического смысла, так как в моем понимании блок - это код ради кода.
Конкретно ваш пример:
-Выносим список в отдельный виджет (в чистой архитектуре так пришлось бы сделать в любом случае) и добавляем в него событие обновления, с параметром какой тип виджета вывести (загрузка, ошибка, данные).
-Создаем функцию на обновление данных списка, внутри которой в блоке try вызываем получаем список данных от репозитория и вызовом события передаем данные в виджет листа (внутри так же проверим на идентичность и если данные новые то вызываем setState), а в блоке catch вызываем событие для вывода ошибки.

Из плюсов:
-не привязываемся к сторонней либе
-объем кода сопоставим с реализацией блока (если не меньше)
-можем реализовать абсолютно любую логику.

Подскажите, все так и есть или я что-то неправильно понимаю?)

iliabaranov
Автор

Спасибо за видосы, с нетерпением жду следующих уроков! Очень познавательно.

Dustystec
Автор

Спасибо за урок и особенно за Equatable, писал просто приложение который тянет данные из локального сервера каждый секунд, к сожалению сервер не web socket и приходится обновлять каждую секунду, но Equatable отлично просто вписался! Спасибо еще раз!

kuatbodikov
Автор

Как же ты круто все разъяснил. Разумеется будет много моментов во время написания кода для своей апки, но базово понятно все. По сути паттерн EventEmitter со свистелками и перделками.

Александр-ыли
Автор

Я представляю какой бы пришлось писать ад если бы не было этих библиотек. Все получилось, правда я запутался т.к смотрю уроки нон стопом, придется в голове их переварить еще раз чтобы был шаблон. Thanks.

МагестЛоил
Автор

А можно еще рассказать про взаимодействие нескольких bloc?

pavelsubochev
Автор

Приветствую, сразу хотел бы поблагодарить за отличные практические уроки. Появился вопрос такого плана: при первой загрузке приложения в случае отключенного интернета крутится индикатор загрузки и если в этот момент подключить интернет, то список загрузится, но если использовать рефреш с отключенным интернетом и в момент обновления его включить то он не обновит список, а будет крутится до ошибки и уже только через кнопку try again загрузит. Есть возможность объяснить почему так происходит и в чем разница логики этих двух казалось бы одинаковых вариантов загрузки?

ВалерийБарзиков
Автор

Большое Вам спасибо за уроки. Подскажите пожалуйста будет ли обучение riverpod?

rus_dos
Автор

А нелегче было бы состояния через enum записать и обращаться по типу state.loaded и тд? по гайду на самом сайте именно так

dtm_m
Автор

Спасибо за полезное видео!) Такая ситуация: мне нужно при нажатии на кнопку инициировать определенный эвент и в зависимости от пришедшего стейта пушить на следующие экран или остаться на текущем. Как такое можно правильно реализовать? У меня получилось через stream это сделать, но что-то подсказывает что это не совсем то. Возможно тут как раз комплитер нужно использовать. Что скажешь?

ЕвгенияМочалина-рг
Автор

Подскажите, насколько реально сейчас вкатиться в Flutter разработку без опыта моб. разработки?

Мурат-яг
Автор

Привет! Спасибо за подробные объяснения. Я бэкендер и только начинаю погружаться в `dart` и `flutter`, с `react` и прочими не сталкивался и хочется немного пояснений касательно `state machine`. Вопрос такой: `bloc`, как я понимаю, не должен инициализироваться один раз по типу `singleton`, проще говоря у каждого `repository` должен быть свой экземпляр `bloc`? Или же есть практика, когда можно его сделать по типу `cache`, создать единожды и обрабатывать все-все события приложения? Последнее, правда, выглядит немного странно, особенно, если учесть что событий может быть очень много, но здесь скорее вопрос оптимизации и потребления ресурсов. Не накладно ли держать в каждом `repository` свой `bloc`?

alekseyl.
Автор

Стас привет.
Как правильно передать в BlocBuilder отфильтрованый список? Пробовал создать новый event и передать новый список через CryptoListLoaded, но он не обновился.

Netrilio
Автор

Смотрю на цену битка и хочетса плакатб

pluxvrbeatz
Автор

Привет, вопрос есть. У меня почему-то когда нажимаю create constructor for final fields генерируется конструктор не с именованными параметрами, а с обычными. Где это можно настроить, чтобы было как у тебя?

eduardklygunov
Автор

Вопрос: а само поведение что если стейт не изменился то builder не срабатывает это чье поведение? Это сам bloc из коробки проверяет поменялся ли стейт и мы просто научили наши объекты нормальному сравнению?

inevitable
Автор

При передаче комплитера в loadcryptoevent(когда пытаюсь обновить с помощью сдвига экрана вниз) постоянно падает ексепшн, в котором просто инфа о одной первой монете [], при загрузке приложения или при нажатии try again всё отрабатывает нормально, что это может быть??

denisshupenko
Автор

как ты сделал, чтобы лампочка создавала тебе сразу именованный конструктор?

Hande_hoch