Вы когда-нибудь задумывались, как некоторые мобильные приложения имеют варианты с правами администратора и без администратора? Приложение администратора имеет другой пользовательский интерфейс, чем неадминистративный. Или вы видели некоторые приложения в Play Store или App Store с премиальными и бесплатными версиями? Итак, как на самом деле это делают разработчики? Как они создают несколько вариантов одного и того же проекта? Они управляют несколькими кодовыми базами? Есть ли одна команда, ответственная за разработку одного варианта, и другая команда, разрабатывающая другой вариант с двумя разными кодовыми базами? И четкий и короткий ответ на это НЕТ.
Для компаний было бы дорого нанять две разные команды для создания двух разных вариантов приложения. Итак, как это возможно? И неудивительно, что ответом на этот вопрос является использование Product Flavor.
Как следует из названия, вариант продукта (или вариант продукта) — это способ создать несколько вариантов вашего приложения из одной кодовой базы. Мы также можем развернуть эти разные приложения независимо друг от друга в соответствующих магазинах.
Выполнение
Теперь мы начнем создавать наши ароматы. У нас будет административная версия и неадминистративная версия. Я буду делать приложения очень простыми и отображать в них текст This is the admin UI
и This is the non-admin UI
. В реальном приложении вы можете следовать тем же методам, которые я вам покажу, и иметь пользовательские интерфейсы в соответствии с вашими пожеланиями.
Во-первых, мы добавим конфигурацию в файл build.gradle
уровня приложения внутри блока android
.
Поскольку у нас будет создано два разных приложения, нам нужны два разных имени для каждого из наших приложений. Для этого нам нужно перейти к файлу /android/app/src/main/AndroidManifest.xml
и отредактировать файл android:label
.
Теперь нам нужно создать два файла main.dart
в нашем каталоге lib
. Мы назовем их main_admin.dart
и main_non_admin.dart
.
Мы создадим наш виджет MyApp()
через мгновение, но давайте сначала позаботимся о некоторых других вещах.
Для пользователей кода VS
Если вы являетесь пользователем VS Code, вам необходимо выполнить некоторые шаги, которые я вам сейчас покажу.
Сначала создайте папку .vscode
в корневом каталоге проекта. Затем создайте внутри него файл launch.json
и добавьте следующий фрагмент.
Теперь, если вы перейдете к опции Run and Debug
в своем VS Code или удержите Ctrl+Shift+D
, вы увидите раскрывающееся меню. Нажав на нее, вы должны увидеть возможность отладки двух разных вариантов приложения.
Для пользователей Android Studio
Если вы используете Android Studio, вам нужно выполнить некоторые шаги, которые я вам сейчас покажу.
Перейдите к опции Edit Configurations
на вкладке Run
. Должно открыться новое окно. Затем вам нужно добавить конфигурации для каждого вкуса.
В параметре Dart entrypoint
добавьте путь к файлу main_admin.dart
, используя параметр обзора с правой стороны. В опции Additional run args
добавьте
--flavor admin --dart-define=appType=admin
Теперь добавьте еще одну конфигурацию для приложения без прав администратора.
Выполните те же шаги, что указаны выше, и в опции Additional run args
добавьте
--flavor non_admin --dart-define=appType=nonAdmin
Теперь мы можем выбрать правильные конфигурации, которые мы хотим запустить и отладить.
Опция dart-define
, которую мы добавили в нашу команду, важна для определения типа приложения во время выполнения. Мы увидим, как мы можем использовать его для определения типов приложений.
Создайте новый файл app_config.dart
внутри каталога lib.
Значение String.fromEnvironment()
исходит из параметра dart-define
, который мы установили ранее для каждого варианта приложения. Теперь, используя логическое значение isAdminApp
, мы можем легко проверить, является ли запущенное в данный момент приложение приложением администратора или приложением, не являющимся администратором, и соответствующим образом отобразить пользовательские интерфейсы.
Теперь создайте новый файл my_app.dart
внутри каталога lib, который будет содержать код для нашего класса MyApp()
. Я стараюсь очень просто отображать разные пользовательские интерфейсы для каждого варианта приложения. Однако вы можете воспользоваться этой идеей и создать настолько сложный пользовательский интерфейс, какой захотите, для каждого варианта приложения.
Как видите, у нас есть класс _AdminBody()
и класс _NonAdminBody()
, которые помогут нам отображать пользовательские интерфейсы в зависимости от приложения, которое мы запускаем.
При запуске обоих вариантов приложения у нас будет два разных приложения, созданных с одной кодовой базой.
Заключение
Мы узнали, как создать два разных приложения с разными пользовательскими интерфейсами, используя единую кодовую базу. Я надеюсь, что этот пост в блоге будет полезен для некоторых из вас, если вы когда-нибудь столкнетесь с ситуацией, когда вам придется создать аналогичный проект.
Если вы хотите увидеть проекты Flutter с правильной архитектурой, подписывайтесь на меня на GitHub. Я также активен в Твиттере @b_plab.
Мои социальные сети:
До следующего раза, удачного кодирования!!! 👨💻
— Биплаб Датта