Проект
Фото автора.
Цель этой статьи — предупредить всех разработчиков, чтобы они могли создавать и планировать более качественные веб-приложения, настраивать их на успех и помогать избегать некоторых досадных проблем, с которыми я столкнулся.
Примечание. По состоянию на ноябрь 2020 г. веб-версия Flutter все еще находится на стадии бета-тестирования. Поэкспериментировав с некоторыми POC, я решил, что он соответствует требованиям моего приложения, поэтому я приступил к его производству.
Изначально я хотел использовать базу данных Firebase Realtime Database, но, как ни странно, Google еще не создал подключаемые модули для веб-сайта Flutter. Таким образом, у меня не было другого выбора, кроме как использовать Firestore, что сработало очень хорошо.
1. Проверьте и запланируйте поддержку подключаемых модулей
Недавно у меня появилась возможность работать над приложением с нуля с ограниченным временем и ресурсами. Приняв во внимание требования и ограничения приложения реального времени, я выбрал Flutter + Firebase.
Пока нет поддержки веб-сайта Flutter для плагина Firebase Realtime Database.
Когда я изучал параметры базы данных в Firebase (Firestore и база данных в реальном времени), я понял, что только Firestore поддерживается для сети Flutter, поэтому у меня не было других вариантов.
Несмотря на то, что Flutter довольно мощный и поставляется с множеством базовых компонентов приложения (таких как маршрутизация, управление состоянием и т. д.), при работе с более крупными приложениями вы будете зависеть от подключаемых модулей. Прежде чем приступить к своей технологии, подумайте о плагинах, которые вы хотите использовать, и о их поддержке.
2. Непоследовательные результаты для Flutter Web
Большое спасибо замечательному сообществу Flutter, так как они проделали действительно потрясающую работу по созданию широкого спектра плагинов — даже для веб-сайтов Flutter. Это вселяет в меня большую уверенность в том, что в будущем Flutter Web станет еще более функциональным.
Опыт разработчиков был гладким, как всегда. Во время разработки я использовал симулятор iPad для использования функции горячей перезагрузки, поскольку ее нет во Flutter web.
Поэтому я активно разрабатывал с помощью симуляторов iOS для простоты и скорости разработки, что подводит нас ко второму уроку.
Да, Flutter Web все еще находится в стадии бета-тестирования, и я здесь не для того, чтобы жаловаться на это. Я просто хочу предупредить других разработчиков, чтобы они знали об этом и могли соответствующим образом смягчить последствия.
3. Проведите тщательное тестирование для всех браузеров и платформ
До этого проекта я некоторое время разрабатывал приложения для Android и iOS на Flutter и никогда не сталкивался с проблемами стабильной работы приложений на обеих платформах.
Приложения для Android и iOS работали так же, как и ожидалось, и я предполагал то же самое с веб-сайтом Flutter. К сожалению, это не так.
У пользователей Android, запускавших веб-приложение Flutterв своих браузерах, возникали следующие проблемы:
У пользователей iOS и настольных компьютеров, использующих Flutter web в своих браузерах, не было никаких проблем, и это здорово, но подводит нас к уроку №3.
- Самая неловкая и странная проблема заключается в том, что какая-то часть текста просто случайным образом становится невидимой в приложении, и эта проблема совершенно случайна. Большую часть времени он работает нормально, но появляется время от времени. Выпуск GitHub.
- Кнопка Обновить — пользователи могут нажать ее в любое время, и она вернет их на начальный экран вашего приложения. Чтобы сохранить состояние обновленной страницы, вам придется сохранить это состояние страницы до того, как пользователь нажмет кнопку обновления, нажмет соответствующий маршрут и вернет сохраненное состояние.
Это веб-приложение, о котором мы говорим, и, будучи разработчиком мобильных приложений, мне повезло, что я не боролся так сильно, как мои коллеги-веб-разработчики, которым приходилось проводить тщательное тестирование для разных браузеров, работающих на экранах разных размеров.
4. Потратьте время на создание основы для создания адаптивных макетов
Переход в Интернет с Flutter затянул меня на эту опасную, но захватывающую территорию.
Я использовал симулятор iOS для разработки (чтобы использовать горячую перезагрузку для ускорения разработки), и веб-приложение ведет себя немного иначе, чем приложение iOS.
Следовательно, как только вы пройдете определенный этап своей работы по разработке, выделите время для запуска и тестирования вашего приложения на нескольких устройствах, ОС и браузерах.
Поскольку Flutter вырос из стабильных Android и iOS и в будущем переместится на веб-платформы и другие платформы, наша сила как разработчиков также возрастает — а с большой силой приходит и большая ответственность.
Будьте ответственным разработчиком, имея автоматический набор тестов, который будет сопровождать вас и даст вам больше уверенности по сравнению с ручным тестированием, чтобы поддерживать ваш проект при развертывании ваших приложений на всех этих платформах для долгосрочная перспектива.
Говоря о разных размерах экрана, это напоминает мне урок № 4.
Я узнал о создании адаптивных макетов из видео ниже, а затем создал проект «Шаблонный код Flutter-Starter», который я использую для настройки своих проектов Flutter. Он содержит основу для моего адаптивного макета вместе с логикой маршрутизации.
5. План маршрутизации
Таким образом, мне не нужно запоминать весь этот код всякий раз, когда я начинаю новые проекты Flutter, и просто строю поверх моего проекта с шаблонным кодом.
При работе над мобильными приложениями мне никогда не приходилось об этом беспокоиться. Navigator.pushNamed()
работал почти со всеми моими требованиями, а горячая перезагрузка отлично справилась с сохранением состояния моего приложения во время разработки.
Смайлики не отображаются/не поддерживаются. «Выпуск GitHub».
Но есть две вещи, которые всегда доступны пользователям веб-приложений и никогда не доступны пользователям мобильных приложений:
Таким образом, маршрутизация становится важной областью, на которой следует сосредоточиться, чтобы поддерживать отличный пользовательский опыт. «Шаблонный код Flutter-Starter»также позаботится о настройке именованных маршрутов. Это базовый шаблонный код, который вам не нужно держать в голове.
- Видимый URL-адрес — они могут видеть, как он обновляется, и могут манипулировать собой, чтобы вмешиваться в логику маршрутизации вашего приложения. Маршруты по умолчанию в проекте Flutter на самом деле не обновляют URL-адрес, и приложение выглядит как одностраничное.
- «https://ceds.ed.gov/mask/dks/FvT.html»
«https://ceds.ed.gov/mask/dks/Fv-T1.html»
«https ://ceds.ed.gov/mask/dks/Fv-T2.html»
«https://ceds.ed.gov/mask/dks/Fv-T3.html»
«https ://ceds.ed.gov/mask/dks/Fv-T4.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/dsk/FvT.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/dsk/Fv-T1.html»
«https://www.scholarscentral.org/editorial- tracking/video-submissions/mask/dsk/Fv-T2.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/dsk/Fv-T3.html»< br /> «https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/dsk/Fv-T4.html»
«https://ceds.ed.gov/mask/gks /TvF.html»
«https://ceds.ed.gov/mask/gks/Tv-F1.html»
«https://ceds.ed.gov/mask/gks/Tv -F2.html»
«https://ceds.ed.gov/mask/gks/Tv-F3.html»
«https://ceds.ed.gov/mask/gks/Tv -F4.html»
«https://www.scholarsce ntral.org/editorial-tracking/video-submissions/mask/gsk/TvF.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/gsk/Tv-F1 .html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/gsk/Tv-F2.html»
«https://www.scholarscentral.org /editorial-tracking/video-submissions/mask/gsk/Tv-F3.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/gsk/Tv-F4. html»
«https://ceds.ed.gov/mask/pks/Siv-Got-canli00.html»
«https://ceds.ed.gov/mask/pks/Siv- Got-canli01.html»
«https://ceds.ed.gov/mask/pks/Siv-Got-canli02.html»
«https://ceds.ed.gov/mask/ pks/Siv-Got-canli03.html»
«https://ceds.ed.gov/mask/pks/Siv-Got-canli04.html»
«https://ceds.ed. gov/mask/pks/Siv-Got-canli05.html»
«https://ceds.ed.gov/mask/pks/Siv-Got-canli06.html»
«https:// ceds.ed.gov/mask/pks/Kar-Kas-canli00.html»
«https://ceds.ed.gov/mask/pks/Kar-Kas-canli01.html»
« https://ced s.ed.gov/mask/pks/Kar-Kas-canli02.html»
«https://ceds.ed.gov/mask/pks/Kar-Kas-canli03.html»
« https://ceds.ed.gov/mask/pks/Kar-Kas-canli04.html»
«https://ceds.ed.gov/mask/pks/Kar-Kas-canli05.html»< br /> «https://ceds.ed.gov/mask/pks/Kar-Kas-canli06.html»
«https://ceds.ed.gov/mask/pks/Kar-Kas-canli07 .html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/Kar-Kas-canli00.html»
«https://www.scholarscentral .org/editorial-tracking/video-submissions/mask/psk/Kar-Kas-canli01.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/ Kar-Kas-canli02.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/Kar-Kas-canli03.html»
«https: //www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/Kar-Kas-canli04.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions /mask/psk/Kar-Kas-canli05.html»
«https://www.scholarsc entral.org/editorial-tracking/video-submissions/mask/psk/Kar-Kas-canli06.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk /Kar-Kas-canli07.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/Siv-Got-canli00.html»
«https ://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/Siv-Got-canli01.html»
«https://www.scholarscentral.org/editorial-tracking/video- submits/mask/psk/Siv-Got-canli02.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/Siv-Got-canli03.html»< br /> «https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/Siv-Got-canli04.html»
«https://www.scholarscentral.org/editorial -tracking/video-submissions/mask/psk/Siv-Got-canli05.html»
«https://www.scholarscentral.org/editorial-tracking/video-submissions/mask/psk/Siv-Got- canli06.html»
5 уроков, которые я извлек из создания веб-приложения с помощью Flutter