Разработка приложения требует его структурирования по разным частям, которые соответствуют некоторым спецификациям архитектуры или шаблонам проектирования, которые мы хотим применить.

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

Эти части:

  • Маршрутизация
  • Государственное управление
  • Внедрение зависимостей/локатор сервисов
  • Компоненты / Сервисы / Варианты использования
  • Связь/связь между компонентами, также известная как обмен сообщениями
  • Операции ввода/вывода
  • Обработка данных

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

У разработки вашего приложения должна быть каждая часть, и в среде Flutter уже есть мощные и популярные пакеты, которые хорошо подходят. Для каждой части я дам вам два пакета.

Маршрутизация

Flutter поставляется с интегрированной маршрутизацией через свои API-интерфейсы Navigator, но этот API действительно большой и может быть сложным для интеграции с некоторыми конкретными вариантами использования. Чтобы упростить все это, есть

Автомаршрут

AutoRoute — один из первых мощных флаттер-пакетов, упрощающих навигацию. Это позволяет вам создавать свои маршруты как класс, что хорошо для безопасности типов аргументов. Он имеет другие функции, такие как защита, поддержка Navigator 2 с декларативной маршрутизацией и навигацией по виджетам, а также многие другие API, такие как TabsRouter для маршрутизации через вкладки.

ГоРоутер

Это пакет, предоставленный командой Flutter для упрощения использования API Navigator. Этот пакет в настоящее время (версия 5.1.5) в основном только упрощает объявления маршрутов и добавляет функцию перенаправления, которую можно использовать в качестве защиты, поэтому у него меньше API или функций по сравнению с AutoRoute, где вы используете совершенно другие API, которые использовали API-интерфейсы Navigator. под капотом.

Государственное управление

Учитывая, что Flutter является фреймворком для реактивного программирования, управление состоянием является одной из основных частей, которую необходимо учитывать. Для этого есть два пакета, которые выделяются среди остальных.

Провайдер

Первый и более старый из них, Provider, является рекомендуемым пакетом для управления состоянием командой Flutter. Он использует InheritedWidget из Flutter под капотом и упрощает его использование. Он позволяет читать, смотреть и выбирать значение из дерева виджетов/элементов. Он прост в интеграции и имеет другие мощные API.

Риверструд

Это пакет управления состоянием, созданный одним из создателей пакета Provider и предназначенный для исправления проблем Provider, таких как невозможность иметь несколько экземпляров одного и того же класса, доступных через дерево виджетов. Но в настоящее время (версия 2.1.1) неудобно, что вам нужен доступ к WidgetRef, поэтому через ConsumerWidget или через экземпляр предоставленного вами значения, когда с Provider вам нужен только BuildContext, к которому вы можете иметь доступ в любом месте вашего виджета дерево.

В настоящее время я не использую его в своем производственном проекте, потому что я работаю со многими разработчиками, а RiverPod также является локатором сервисов (или может использоваться таким образом), у вас может возникнуть соблазн использовать его для любых других сервисов/компонентов. местоположение что может привести к доступу к вашей модели представления внутри службы на уровне данных только потому, что разработчику «нужно вызвать определенный метод». И есть большая проблема сделать это.

Внедрение зависимостей/локатор сервисов

Внедрение зависимостей и размещение сервисов являются одними из основных концепций ООП и упрощают реализацию принципов SOLID наряду с чистой архитектурой. С ними вы можете сделать свой класс легко тестируемым, что позволит вам иметь в виду TDD.

"Возьми"

Этот пакет очень полезен в качестве локатора службы, позволяя вам иметь доступ к службе в любом месте вашего приложения после создания экземпляра. Он имеет множество функций, таких как создание экземпляров lasy или singleton. Вы можете использовать его с пакетом injectable для поддержки внедрения зависимостей посредством аннотаций и генерации cpde.

"Получать"

Этот пакет больше похож на мини-фреймворк внутри фреймворка Flutter. Он упрощает многие вещи и может использоваться как локатор сервисов, база данных, управление состоянием, навигатор и многие другие.

Обмен сообщениями

Обмен сообщениями позволяет вам соединять ваши компоненты, не делая их зависимыми друг от друга. Это идеально подходит для ремонтопригодности и тестов. Он также известен как источник событий с некоторыми концепциями, такими как концентратор, шина событий и т. д. Для этого есть два пакета.

ИвентБасПлюс

Как следует из названия, этот пакет позволяет вам создать шину событий с функциями публикации/подписки, называемыми здесь fire и listen . Он использует Stream API событий под капотом, что позволяет публиковать/подписываться на события, которые являются классами.

Сообщения

Как и предыдущий, он реализует концепцию обмена сообщениями с функциями публикации/подписки. Он добавляет больше возможностей к шаблону Observe, Guards, Store, чтобы сохранять ваши события, которые являются сообщениями, и обеспечивает высокий уровень настройки. Вместо потока сообщений/событий он использует принцип очереди с реализованным шаблоном приоритетной очереди.

Операции ввода/вывода

К вводу/выводу (ввод/вывод) я отношу HTTP-запросы, манипуляции с файлами и любые другие.

Дио

Вероятно, это самый популярный пакет Flutter для HTTP-запросов. Он позволяет вам выполнять все HTTP-запросы (GET, PUT, PATCH, POST, DELET, HEAD, OPTIONS и т. д.) и имеет API для загрузки ресурсов и функций, таких как перехватчики, преобразователи.

ФайлПикер

Это позволяет получить доступ к файлу и сохранить их. Это очень простой пакет. Простота интеграции и использования со многими функциями, такими как сбор файлов из облака.

Обработка данных

Под обработкой данных я подразумеваю все, что связано с сериализацией и операциями CRUD/CQRS. И для этого у меня есть два пакета в виду.

JsonSerializable

Это, вероятно, самый популярный для сериализации данных во Flutter. Он легкий, простой и поставляется с аннотациями через пакет json_annotation.

Улей

Это пакет, позволяющий иметь мощную базу данных на основе ключей и значений с принципом «коробки», где данные представляют собой CRUD.

Я заканчиваю здесь. Надеюсь, вы нашли свое счастье в этом списке…