Проект

Фото автора.

Цель этой статьи — предупредить всех разработчиков, чтобы они могли создавать и планировать более качественные веб-приложения, настраивать их на успех и помогать избегать некоторых досадных проблем, с которыми я столкнулся.

Примечание. По состоянию на ноябрь 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