Целевая страница серии видеороликов MVC Flutter Framework на YouTube.

MVC во Flutter прошел долгий путь. С октября 2018 года он продолжил развиваться и превратился в устоявшийся подход к разработке приложений на Flutter.

Это было сознательное усилие по включению шаблона проектирования MVC в существующую структуру Flutter с использованием преимуществ всего, что есть Flutter, при почти беспрепятственном применении подхода Модель-Представление-Контроллер. Если вы знакомы с Flutter, вы можете использовать представленную здесь платформу MVC. Если вы знаете MVC, вы узнаете, как работать с Flutter.

Фреймворк не является явным верхом фреймворка Flutter - он работает с Flutter, обеспечивая стандартный набор функций и возможностей, а также структурированный подход для организации исходного кода и ускорения более эффективной разработки программного обеспечения. Это правда - и все это доступно в автономном пакете Dart, mvc_application.

В первую очередь, эта статья должна служить дополнением к серии видеороликов YouTube, над которыми я работаю, чтобы познакомить разработчиков с фреймворком MVC Flutter. Каждое видео будет доступно здесь, и эта статья, вероятно, будет содержать дополнительную информацию по теме каждого видео. В зависимости от объема информации для конкретного видео могут потребоваться отдельные статьи. В таком случае ссылка на эту статью будет доступна здесь.

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

Давай начнем.

Вступление. в MVC Flutter Framework

В первом видео представлена ​​MVC Flutter Framework, реализованная с помощью пресловутого Counter App. Это приложение отображается впервые, когда вы когда-либо создаете новый проект Flutter. Это видео демонстрирует более очевидные преимущества использования шаблона проектирования MVC при разработке программного обеспечения во Flutter. Обратите внимание, исходный код этой серии легко доступен на GitHub: counter_app

Вы заметите, что в видео представлена ​​одна постоянная характеристика - это разделение данных приложения от его интерфейса и обработки событий: Модель-Представление-Контроллер. Однако то, как эти три компонента «взаимодействуют» друг с другом, может варьироваться в зависимости от размера приложения и количества вызовов API, необходимых для его запуска. Другими словами, шаблон проектирования MVC может адаптироваться для отражения таких потребностей, обеспечивая масштабирование и ремонтопригодность:

Есть много взглядов на все

Это может быть не сразу видно на видео, но Контроллер может быть зарегистрирован или назначен любому количеству представлений (или объектов StateMVC). Контроллер имеет свободный доступ к "последнему" объекту состояния, которому он был назначен. Когда этот экран закрывается (т. Е. Этот объект State закрывается), Контроллер восстанавливает доступ к предыдущему «Представлению», которому он был назначен. Эта возможность, например, позволяет одному контроллеру содержать устойчивую бизнес-логику для всего приложения в одном месте - в одном классе. Однако передайте эту логику множеством разных способов в форме разных интерфейсов.

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

Кроме того, поскольку зарегистрированный контроллер имеет доступ к своему «текущему» объекту состояния, он затем имеет доступ ко многим «событиям», которые могут запускаться во время работы приложения. Разработчики, работающие на платформе Android, распознают это как обычную практику при прослушивании событий в классе Activity и его жизненном цикле.

initState () - вызывается ровно один раз при первом создании объекта State.

initAsync () - вызывается ровно один раз при запуске приложения для инициализации любых «трудоемких» операций, которые необходимо выполнить, чтобы приложение могло продолжаться.

dispose () - когда объект State больше никогда не будет построен. Его действие прекращено.

didChangeAppLifecycleState (состояние AppLifecycleState) - вызывается, когда система переводит приложение в фоновый режим или возвращает приложение на передний план.

didUpdateWidget (StatefulWidget oldWidget) - переопределите этот метод, чтобы он отвечал при изменении виджета (например, для запуска неявной анимации).

didChangeDependencies () - при изменении зависимости этого объекта Состояние.

didChangeLocale (языковой стандарт) - когда система сообщает приложению, что языковой стандарт пользователя изменился.

didChangeMetrics () - при изменении размеров приложения. (т.е. когда телефон поворачивается.)

onError (сведения о FlutterErrorDetails) - позволяет определить собственный обработчик ошибок. По умолчанию сообщение об ошибке выводится на консоль.

reassemble () - вызывается во время горячей перезагрузки. Например, при повторной сборке приложения во время отладки.

deactivate () - когда объект состояния удаляется из дерева виджетов.

didChangeTextScaleFactor () - при изменении коэффициента масштабирования текста платформы.

didHaveMemoryPressure () - когда системе не хватает памяти.

didChangeAccessibilityFeatures () - когда система изменяет набор активных специальных возможностей.

Ссылки на ресурсы

Напишите свое первое приложение Flutter

Модульная структура MVC Flutter Framework

Ссылки на ресурсы

Организация библиотечного пакета

Скоро появятся дополнительные видео…

Плейлист YouTube MVC Flutter Framework

Ваше здоровье.

→ Другие рассказы Грега Перри