Найти в Дзене

Разработка на Flutter с нуля - мой опыт

Всем привет! Я сейчас являюсь студентом МАДИ, и учусь на инженера разработчика, тобишь того же программиста. Сейчас я на третьем курсе и хотел бы поделиться своим первым опытом в более менее осознанной разработке мобильных приложений, в данной статье именно на Flutter (хотя я поклонник .NET) :) В 2023 году я ещё пытался всё реализовать на Xamarin, но зашёл в тупик, от чего разработку я на время отложил. Но в конце 2024 года, в универе нас познакомили с таким фреймворком, как Flutter. Flutter — комплект средств разработки и фреймворк с открытым исходным кодом для создания мобильных приложений под Android и iOS, веб-приложений. Тогда, после создания учебного веб-приложения на этом фреймворке, было принято мною решение начать пробовать написать полноценное мобильное приложение. И как раз под руку мне попалось то решение проблемы, описанной выше, которую я забросил. Разработка началась заново. Первым делом, надо быть сделать локальную базу данных. Она должна быть легковестной, быстрой и ле
Оглавление

Всем привет! Я сейчас являюсь студентом МАДИ, и учусь на инженера разработчика, тобишь того же программиста. Сейчас я на третьем курсе и хотел бы поделиться своим первым опытом в более менее осознанной разработке мобильных приложений, в данной статье именно на Flutter (хотя я поклонник .NET) :)

И так, давайте, пожалуй, начнём.

В 2023 году я ещё пытался всё реализовать на Xamarin, но зашёл в тупик, от чего разработку я на время отложил. Но в конце 2024 года, в универе нас познакомили с таким фреймворком, как Flutter.

Flutter — комплект средств разработки и фреймворк с открытым исходным кодом для создания мобильных приложений под Android и iOS, веб-приложений.

Тогда, после создания учебного веб-приложения на этом фреймворке, было принято мною решение начать пробовать написать полноценное мобильное приложение. И как раз под руку мне попалось то решение проблемы, описанной выше, которую я забросил. Разработка началась заново.

Первым делом, надо быть сделать локальную базу данных. Она должна быть легковестной, быстрой и легко расширяемой. Мой выбор пал на Hive.

Hive — это легкая и быстрая база данных NoSQL с ключевыми значениями, специально разработанная для Flutter. В реализации и пользования он был достаточно лёгким, от чего я на нём и остановился.

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

Моим друзьям зашло и уже ждали результата. Хоть какого то :)

Всё это было уже налажено, а исходники можете посмотреть в моём GitHub.

По этому я двинулся дальше. По запросу своих друзей добавлял нужные поля, новые таблицы базы данных, а вот дальше я столкнулся с первой проблемой - надо было как то реализовать возможность вводить свои поля с названиями, причём в «неограниченном количестве».

Как я решил это проблему?

Так как у нас Hive с массивами строк работает не очень хорошо, я решил создать отдельно класс, который хранит в себе

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

Но ещё надо было это отобразить! Отображение я решил делать через циклы (в первоначальной версии), и при открытии редактора персонажа, каждый раз создавать новые поля со значениями из базы данных. Но чтобы мне додуматься до этого, мне потребовался примерно месяц, после чего я продолжил разработку.

Затем был добавлен поиск, теги (которые реализовываются через спец. генерацию и поля в моделях), и так далее.

Тёмная тема была добавлена без каких либо проблем, для этого в коде есть theme_provider. Для локализации я использовал подобную методику с использованием SharedPreferences (библиотека нужна для хранения настроек приложения и подгрузки данных) при каждой сессии.

Для нижней панели навигации я реализовал так: homepage - главный экран с навигацией внизу, а контент - это страницы, хранящиеся в List с типом данных Widget. В целом, ничего трудного нет.

Для горизонтальных экранов, виджет панели навигации я полностью перестраиваю.

UI на Flutter строится очень и очень легко. Какие то сложные виджеты я храню в отдельной директории в отдельных файлов и их просто вызываю в целях экономии не только строк на странице, но и ещё экономии памяти, использую тот же самый виджет, а не создавая новый. Подобная система у меня и с диалоговыми окнами.

Все вычисления у меня находятся в services, но и на страницах она так же есть, так как, например, генерации тегов не вижу смысла выносить в отдельную логику.

В заключении хочу сказать, что разработка на Flutter сильно упрощает работу, соеденяя интерфейс и логику работы приложения. Лично я написал CharacterBook за 5 месяцев, с нуля, при этом имея пока только начинающие навыки разработки ПО.

Спасибо всем, кто прочитал! Подобные статьи у меня первые в опыте, надеюсь понравилось:,)

Ссылка на репозиторий приложения: github.com/MaxGog/CharacterBook