Обновить
30.05

Flutter *

Фреймворк для кросс-платформенной разработки

Сначала показывать
Порог рейтинга
Уровень сложности

Как я научился не волноваться и полюбил управление состояниями Flutter. MVI и Clean Code в комплекте

Время на прочтение13 мин
Охват и читатели12K

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

Если вы читали мою прошлую статью, или позапрошлую, то, наверное, уже знаете что я nerd vulgaris увлекаюсь программированием всякого. В комментариях к одной из прошлых статей было высказана идея провести параллель между приложением на Flutter и нативным приложения для Android на Kotlin c использованием view model, live data, view binding и найти аналоги привычным по Kotlin языковым средствам.

Читать далее

ViewModel во Flutter – это антипаттерн

Время на прочтение11 мин
Охват и читатели14K

Всем привет! Представляю вам текстовую версию моего доклада на DartUP 2021 (сам доклад на английском можно найти здесь). Посвящен он довольно популярному архитектурному паттерну MVVM (он же Model-View-ViewModel), а конкретно той его части, что про ViewModel.

Паттерн этот весьма распространен в мире нативной Android-разработки – во многом благодаря тому, что является официальной рекомендацией Google. А поскольку многие Flutter-девелоперы попали в мир Flutter'а из нативного Android'а, то и подходы они склонны применять те же самые. Как говорится, работает – не трогай и ничего не меняй.

Но как по мне, в мире Flutter'а этот паттерн не то чтобы полезен, а скорее даже и вреден. И сейчас я буду вас в этом убеждать.

Читать далее

Flutter 2.8: что нового

Время на прочтение21 мин
Охват и читатели11K

Повышение производительности, новые фичи Firebase, состояние десктопной версии, новые инструменты и многое другое.

Я — Евгений Сатуров, Head of Flutter в Surf и ведущий Flutter Dev Podcast. Представляю перевод официальной статьи про свежий релиз Flutter 2.8, дополненный моими комментариями.

Читать далее

Elementary: новый взгляд на архитектуру Flutter-приложений

Время на прочтение6 мин
Охват и читатели14K

Elementary — это архитектурный пакет, который создали в Surf на основе опыта разработки приложений на Flutter и лучших практик современной разработки.

Решение позволяет чётко разделить слои согласно ответственностям, сделать код прозрачнее, а тестирование проще. На примере реального приложения показываем, как использовать Elementary.

Читать далее

Flutter по сравнению с Kotlin в 2021 году: Что лучше для разработки кросс-платформенных приложений?

Время на прочтение17 мин
Охват и читатели27K

Кроссплатформенная разработка находится на подъеме, и вы можете задаться вопросом, почему. Как можно предположить из названия, она позволяет запускать приложения на нескольких платформах — будь то iOS или Android — и помогает бизнесу привлечь больше клиентов, а значит, заработать больше денег. Неудивительно, что акцент постепенно, но неуклонно смещается в сторону кроссплатформенной разработки, и новые технологии появляются все чаще и чаще.

Просуществовав некоторое время, этот тип разработки выявил двух лидеров: React Native и Flutter. Почему же мы хотим рассказать вам о Flutter в сравнении с Kotlin, а не о Flutter и React Native? Что такое Kotlin, и может ли он на самом деле представлять угрозу популярности Flutter? Что такое Kotlin Multiplatform (Мультиплатформа), и в чем преимущества обеих технологий? Давайте узнаем.

Читать далее

Разработка приложения на Flutter с нуля до релиза: Идея + Базовая инфраструктура

Время на прочтение11 мин
Охват и читатели43K

Привет! В данном цикле статей я хотел бы показать, как может происходить создание приложений с использованием Flutter. У меня есть несколько Open Source решений, которые будут использованы в данном приложении. Что из этого получится - увидим в скором будущем.

Если долго мучаться...

Dart Code Metrics — мой первый pull request

Время на прочтение8 мин
Охват и читатели2K

В статье рассмотрел инструмент для анализа кода Dart Code Metrics и о том, насколько полезно его использовать. Постарался поделиться своими знания в создании нового правила для анализатора. Автоматизировали проверку имени класса и названия файла не только для своего проекта, а также для всех тех, кто захочет подключить такое правило к своим проектам используя Dart Code Metrics.

Читать далее

Flutter: PlatformView + QR code reader

Время на прочтение8 мин
Охват и читатели5.8K

Из бесплатных доступных библиотек для работы с qr кодами в Android самой лучшей (на мой личный взгляд) является zxing-android-embedded. Часто, UI который предоставляет эта библиотека не достаточно или нужен какой-то иной. В этой статье пойдет речь о том, как «кастомизировать» UI библиотеки zxing-android-embedded для распознавания QR кодов при использовать её Flutter проекте.

Представленная статья и код вместе с ней, всего лишь минимальный достаточный пример для демонстрации возможностей «кастомизации» zxing-android для работы с ней во flutter. Статья затрагивает только Android реализацию не касаясь IOS.

Мы будем использовать три основных компонента для взаимодействия с этой библиотекой из flutter окружения. Для этого нам потребуется:

Читать далее

Flutter ConstWidget

Время на прочтение4 мин
Охват и читатели3.3K

Обновление данных в интерфейсе всегда задействует немало ресурсов а его реализация может быть выполнена множеством неоптимальных способов. Повышение производительности, не только радует пользователя, но и расширяет круг целевой аудитории с более старыми устройствами. State management Как? Когда? Почему? Каким способом? Лучше всего изменять состояние виджета/древа виджетов? Сейчас можно увидеть большое кол-во различных библиотек и подходов для решения данной задачи. Вопрос обновления данных интерфейса настолько большой, что библиотеки, которые помогают с управлением состояний становятся Архитектурными подходами, паттернами, а статей про то какой подход лучше еще больше. Данное решение подойдет к любому проекту, ему не нужна библиотека и вовсе не обязательно использовать данный виджет.

Читать далее

Flutter: автоматизация UI тестирования

Время на прочтение10 мин
Охват и читатели12K

Мы — команда мобильного проекта FL.ru. В своей статье хотим познакомить вас с Flutter Driver и рассказать об автоматизации UI тестирования мобильных приложений с помощью данного инструмента.

Читать далее

Home Credit Hack: как прошел онлайн-хакатон в Казахстане

Время на прочтение8 мин
Охват и читатели1.2K

15-17 октября Банк Хоум Кредит провел онлайн-хакатон Home Credit Hack для специалистов из Казахстана. Участникам нужно было создать приложение для клиентов и партнеров для автономных покупок. Эксперты и организаторы хакатона Ян Ценкр, директор IT департамента Банка Хоум Кредит, Станислав Тян, директор департамента онлайн-бизнеса и Илья Линицкий, сооснователь Phystech.Genesis рассказывают, как проходило соревнование, сколько было заявок на участие, как отбирали конкурсантов и какие идеи предлагали команды. 

Читать далее

gRPC + Dart, Сервис + Клиент, напишем? Часть 5: Web

Время на прочтение4 мин
Охват и читатели4.3K

После выхода 4й части, где мы подключили мобильное Flutter приложение к сервису Umka, я получил много вопросов от читателей, которые попробовали запустить Web версию приложения и оно в браузере не заработало.

Так будет ли Flutter приложение на базе gRPC сервиса работать в Web?

TLDR: Да, но не получится "стримить" со стороны клиента, а всё остальное будет работать. Для этого нужно сплясать с бубном преобразовать запросы на сервис и ответы с него в формат понятный для браузера. Можно использовать Envoy в качестве Web proxy, который "из коробки" поддерживает входящие/исходящие gRPC запросы.

Ниже я покажу как это сделать.

Читать далее

Современные DI-тренды во Flutter-разработке

Время на прочтение3 мин
Охват и читатели4.2K

На очередном митапе ОЭЗ "Иннополис" Flutter-разработчики поделились опытом эффективного использования возможностей фреймворка в больших проектах. В ходе митапа они раскрыли основные преимущества своих подходов, поделятся полезными инструментами в работе с web-приложениями.

Как показывает практика, в приложения, которые переходят на определенный новый уровень, редко добавляются новые экраны или модули. Однако в то же время, постоянно появляются специфические бизнес требования, которые должны быть соблюдены. И в этот момент у абсолютного каждого разработчика возникает вопрос: “Как добавить новые требования в приложение, чтобы оно не сломалось?”

Именно поэтому наша разработка приложений осуществляется на основе определенного подхода. 

Ниже вы можете увидеть фрагмент дерева и маленький разобранный кусочек логики. Был использован WM подход, поэтому можно считать, что это элемент интерфейса.

Для добавления новых требований нам нужен StatementService - сервис, в котором находятся методы для работы с выписками и состоянием счета пользователя. Также нужен StatementRepository, чтобы подключиться к бэкграунду. Клиент и провайдер нам тоже нужен для реализации нашей затеи. В нашем случае это Dio и Interceptor соответственно.

В этой статье мы рассмотрим Dependency Injection для Dart и Flutter проектов. Мы расскажем о том, как сделать Dependency Injection декларативным (самогенерируемым) и при этом сохранить человеко-читабельность, как подменить компоненты при тестировании и как изолируются моки от production-кода.

Читать далее

Ближайшие события

Про Flutter: как бекендер в мобильную кроссплатформу лез

Время на прочтение6 мин
Охват и читатели13K

Flutter – это полноценная SDK, позволяющая писать нативные приложения на ненативном языке (dart), имеющем высокую скорость работы (выше конкурентов, но немного ниже натива), отклика/отрисовки. Этот набор средств разработки позволяет писать достаточно сложные с точки зрения интерфейса и бизнес-логики приложения и имеет, что самое главное, достаточно низкий порог вхождения при высокой скорости прототипирования.

Читать далее

Я устал вручную удалять мобильное приложение с устройства и написал расширение для VS Code

Время на прочтение8 мин
Охват и читатели5.8K

Каждый мобильный разработчик рано или поздно сталкивается с тем, что его начинают утомлять некоторые рутинные операции. Скажем, дебажишь авторизацию в приложении. Или проверяешь перехват UTM-метки при первой установке. Или пытаешься понять, работает ли корректно очередная миграция БД. Или попадаешь в еще миллион ситуаций, когда тебе нужно по много раз елозить иконкой приложения по экрану смартфона (или курсором по эмулятору), чтобы его удалить и установить начисто.

Когда я работал над нативными Android-приложениями, меня спасал плагин для Android Studio ADB Idea. Очень удобно через шорткат можно было вызвать окошко с основными ADB командами по типу "Удалить приложение", "Принудительно завершить приложение", "Перезапустить приложение" и т.п.

Читать далее

DartUP возвращается: открыта регистрация на самую масштабную русскоязычную конференцию по Dart и Flutter

Время на прочтение1 мин
Охват и читатели2.5K

Привет, Хабр! 3 и 4 декабря мы проведем DartUP — онлайн-конференцию по Dart и Flutter на русском и английском. Вас снова ждет несколько потоков докладов: спикеры из Google и других компаний, а также разработчики тулинга для Dart и Flutter поделятся новостями об экосистеме и своим практическим опытом.

Узнать больше про DartUP

Локализация и мультиязычность во Flutter

Время на прочтение4 мин
Охват и читатели14K

您好,让我们了解如何制作为您的用户提供本地化的应用程序。

Ничего не поняли? Я тоже! А теперь представьте, что пользователь тоже не понимает язык, на котором отображается интерфейс вашего приложения, и удаляет его, едва успев установить. Но это легко исправить: Flutter позволяет разрабатывать приложения, которые будут понятны пользователям.

Как? Смотрите официальную документацию Flutter или следуйте инструкциям в этом руководстве.

Читать далее

Определение App flavors для приложений Flutter

Время на прочтение4 мин
Охват и читатели4.1K

Этот пост будет полезен для Flutter-разработчиков, которым хочется поработать с флейворами (flavours), изменить и дополнить их. Сегодня мы не будем говорить о процессе создания флейворов с разными иконками, названиями и идентификаторами, благо таких публикаций существует уже очень много. Вместо этого речь пойдет о том, как определять флейвор в Dart-коде, а также о решении некоторых часто встречающихся при сборке приложений проблем, связанных с введением флейворов. 

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

Читать далее

Flutter: как мы выбирали навигацию для мобильного приложения?

Время на прочтение11 мин
Охват и читатели26K

Flutter вышел в стабильной версии в 2018 году. Все это время он активно развивался: появилась поддержка Null safety, расширились возможности по темизации и локализации приложений, добавилось огромное количество новых виджетов. Одно из таких нововведений — Navigator 2.0, выпущенный Flutter осенью 2020 года. Это гибкий инструмент для решения непростой задачи навигации в мобильных приложениях. Разработчики начали применять Navigator 2.0, но столкнулись с трудностями и проблемами, о которых говорили команде Flutter в официальном репозитории, предлагая упростить использование инструмента. Самым подробным материалом по новому подходу является статья в блоге Flutter, но и ее мало для того, чтобы начать работать с Navigator 2.0 в продакшен-приложениях.

Хочу знать больше