Skip to content

Nightwelf/surf-flutter-app-template

 
 

Repository files navigation

Шаблон

Шаблон для инициализации проекта в Surf.

Требования

Версия flutter >= 2.5.0

Инициализация

При инициализации проекта нужно:

  1. Найти по поиску flutter_template и в нужных местах заменить на название вашего проекта.
  2. Проинициализировать FirebaseCrashlytics(найти можно через TODO(init-project)).

Структура

  • assets
    • fonts
    • icons
    • images
  • lib
    • api
      • data
      • service
        • {name}
    • assets
      • res
      • themes
      • colors
      • strings
    • config
    • features
      • {name/common}
        • di
        • domain
          • entity
          • repository
          • mappers
        • service
        • screens
          • {screen_name}
            • widget
            • wm
            • model
        • widgets
    • utils
  • scripts
  • test
  • tools

assets

Содержит необходимые ресурсы(картинки, шрифты, иконки).

lib - кодовая часть проекта, в ней есть такие папки как:

  • api - слой данных и взаимодействия с Rest API. В ней находятся файлы сгенерированные при помощи SurfGen.
  • assets - строковое представление необходимых ресурсов, темы, цвета, строки.
  • config - конфигурации проекта, например окружение(environment).
  • features - фичи используемые или реализуемые в проекте. В ней создаются папки с названиями фич, в которых находятся все, что к этой фиче относится. В папке common находятся сущности расшаренные между несколькими фичами или нужные всему приложению, старайтесь избегать добавления туда файлов без четкой необходимости, добавляйте в нее файлы только тогда, когда это действительно нужно. Структура фич:
    • di - контейнеры внедрения зависимостей.
    • domain - содержит:
      • entity - бизнес модели данных.
      • repository - репозитории, относящиеся к фиче.
      • mappers - мапперы данные-модель и обратно.
    • service - бизнес логика.
    • screens - экраны, относящиеся к фиче, каждый экран добавляется в отдельную папку с названием экрана, в которой отдельными файлами лежат:
      • widget - ElementaryWidget.
      • wm - WidgetModel.
      • model - ElementaryModel.
    • widgets - виджеты, относящиеся к фиче.
  • utils - необходимые утилиты.

scripts

Скрипты, необходимые для сборки артефакта проекта. Часть скриптов уже добавлена.

test

Тесты приложения.

tools

Скрипты и туллинг для разработки(например, api_generator).

Аналитика

Подключены:

Архитектура

Используем архитектуру выстроенную вокруг Elementary. Экраны, а так же части интерфейса с собственной логикой описываются по принципу mvvm-паттерна. Несмотря на возможность реализации бизнес логики непосредственно в модели, модель оставляем лишь как первую точку доступа к бизнес-логики, саму же бизнес-логику реализуем в сервисах. При необходимости использования менеджера состояния на уровне сервисов можем реализовать и использовать надежные подходы - BLoC или Redux.

Навигация

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

ApiGen

По умолчанию используем SurfGen.

Руководство по инициализации SurfGen на проекте(часть пунктов уже сделаны, проверьте их актуальность и соберите исполняемый файл(пункт 4)).

Руководство по использованию SurfGen на проекте.

DI

В качестве DI используем Provider.

Зависимости группируются в сущности-контейнеры с интерфейсом, описывающим набор поставляемых зависимостей. Эта сущность поставляется функционалу при помощи виджета DiScope, в который оборачивается соответствующий функционал.

Например, AppScope - базовая сущность всего приложения, которая содержит зависимости, живущие все время, все приложение мы оборачиваем в DiScope и передаем фабрику возвращающую AppScope.

Если какому-то функционалу нужны зависимости, требующиеся только ему, они выносятся в отдельную сущность, которая будет оборачивать этот функционал.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dart 74.6%
  • Ruby 12.5%
  • Makefile 4.2%
  • Shell 4.1%
  • Objective-C 1.7%
  • Kotlin 1.5%
  • Swift 1.4%