Русский
Русский
English
Статистика
Реклама

Isolate

Из песочницы Flutter. Как прокачать ваш BLoC

27.08.2020 12:18:32 | Автор: admin
Реализующих BLoC паттерн библиотек много. Но та, о которой я расскажу, необычная, и называется isolate_bloc.

Как можно понять из названия это какой-то необычный блок, а особенность его в том, что он работает в отдельном Isolate (далее изолят) и не тормозит ваш UI.

В чем проблема обычного bloc-а?


Помимо бойлерплейта есть и еще одна проблема он работает в главном потоке, поэтому тяжелые задачи, типо парсинга json могут привести к фризам в UI.

С первой проблемой могут помочь библиотеки по типу simple_bloc или cubit. Со второй изолят, или обертка над ним Compute. В принципе это действительно хорошая связка, которую используют многие, но даже она решает не все проблемы. Например, в изоляте нельзя работать с MethodChannel, и в принципе его использование сопряжено с неудобствами и бойлерплейтом.

Isolate Bloc




Эта библиотека помогает использовать BLoC паттерн и решает ряд задач, таких как работа с изолятами и MessageChannel-ами. Кроме этого она позволяет сократить количество кода при написании самого блока.

А как пользоваться?


Чтобы понять, как работать с этой библиотекой, рассмотрим простой пример.

Несмотря на то, что далее я постарался описать все подробно, что-то может остаться непонятным, поэтому предполагается, что вы уже знакомы с BLoC паттерном.

Любой flutter проект начинается со счетчика, поэтому мы тоже с него начнем. Первым делом напишем сам блок.



В 3 строке мы создаём класс CounterBloc, который наследуется от класса IsolateBloc. Здесь же мы указываем тип ивентов и состояний нашего блока.

В 4 строке мы передаём начальное состояние счетчика 0.

С 6 по 9 строках мы переопределяем метод onEventReceived, который вызывается при получении нового ивента. State это гетер, который возвращает последнее состояние, которое блок отправил в UI.

В 8 строке мы используем функцию emit, которая принимает состояние и отправляет его в UI.

Теперь нужно зарегистрировать блок.

Так как он работает в отдельном изоляте, мы не можем напрямую создать его. Поэтому нужно дать знать библиотеке о его существовании с помощь функции register.



В 5 строке мы инициализируем библиотеку и передаем функцию, которая будет работать в изоляте и регистрировать блоки.

В 10 строке мы регистрируем CounterBloc теперь библиотека сможет создать его по нашему запросу.

Осталось лишь описать UI!



В 8 строке мы создаем блок и добавляем его в дерево виджетов.

В 23 строке мы слушаем состояние блока. IsolateBlocBuilder работает как и StreamBuilder, но сам способен найти блок в дереве виджетов.

С 31 по 33 строки мы с помощью extension метода isolateBloc<Bloc, State>() получаем блок из контекста и с помощью функции add() добавляем в него новый ивент.

На этом всё, теперь можно запускать!

Финал


На базовом примере я показал, как работать с этой библиотекой, а для дальнейшего изучения советую заглянуть на её страницу на гитхабе. Там описан весь функционал и есть более сложные примеры.
Подробнее..
Категории: Flutter , Bloc , Isolate

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru