Flutter. Много
2.76K subscribers
333 photos
23 videos
258 links
Заказать мобильную разработку: https://amiga.agency/?utm_source=tg
Заказать рекламу в канале @amiga_agency_bot

Новости Flutter-разработки, дайджесты мероприятий, личный опыт.
Download Telegram
Отвечаем на вопросы, ч.1

Hola, Amigos! С вами Антон Мартышков, Flutter-dev Amiga. Я собрал список вопросов из того-самого-поста, и теперь отвечаю на них. Поехали!

1. "Часто в примерах конфигурации вида темы цветов, текстов и остальное выводят в константы. Вопрос: насколько производительнее иметь эти данные в статике константной, нежели генерировать в рантайме по необходимости. Зачем вообще хранить статично эти свойства, если есть вероятность, что обращения к ним не будет."

Нужно стараться прописывать все цвета, шрифт и прочее в тему (ThemeData). Такой подход позволит избежать лишних ручных вставок цвета или шрифта в UI, так как они подтянутся из темы. Где нужно, там их можно будет переопределять. Если в приложении нужно реализовывать другие цветовые схемы по типу день-ночь, такой подход знатно сократит время и качество ее реализации. Если у вас очень много цветов, то это вопрос к профессионализму дизайнера или оптимизации дизайна. Обычно в UI-kit используется 20-30 цветов.

К вопросу про производительность. Theme — это InheritedWidget, поэтому все, что в нем проинициализированы, будет в едином экземпляре и доступно через контекст. Создание экземпляров класса Color так же не является трудозатратной операцией, еще и сборщик мусора потом эти экземпляры удалит. Это, скорее, вопрос удобства и дальнейшей поддержки реализованного вами подхода для стилизации приложения. Можно и в каждом виджете прописывать цвета, шрифты, но когда вы столкнетесь с необходимость перехода на новый дизайн, будет тяжело.

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

2. "Второй вопрос про статичные функции. Част часто вижу их применение. Есть ли разница для приложения при использовании статичных функций, а не функций объекта. Можно объявить статик функцию и вызвать MyClass.foo();. Но с таким же успехом можно создать объект класса и вызвать у него функцию. А после необходимости он исчезнет из памяти MyClass().foo()"

Спасибо за вопрос. Конечно, влияние будет, но зависит от того, что делает эта самая foo(). Скажем, провести какие-нибудь манипуляции с массивом вряд ли проблема. А вот инициализировать СДК, который редко используется, я бы не стал,. Тут лучше сделать по принципу: нужно? -> инициализируем -> используем -> освобождаем место.

3. Влияет ли статика на финальный продукт, если да, то как?

Любой инструмент, который используется неправильно, скорее всего, окажет негативное влияние на продукт. Если не инициализировать тот же СДК как статик, и не выносить бизнес-логику, то видимого влияния на продукт вы не получите. Лучше бы конечно, привести примеры.

Надеюсь, я правильно понял ваши вопрос и дал четкие ответы, если что, пишите. Удачи!
🔥16👍32
Нативное view во Flutter

Hola, Amigos! С вами Антон Мартышков, Flutter-dev Amiga. Зачем используют нативное view во Flutter? Это удобно в тех случаях, когда есть готовое и проверенное решение под нативную платформу, а времени переделывать под Flutter не хватает. Легче показать Android activity напрямую в вашем Flutter-приложении. По такому принципу работают Google maps вo Flutter-приложениях.

В Android есть 2 способа отобразить нативный интерфейс:

1. Virtual displays — рендерит виджеты AndroidView внутри VirtualDisplays вместо того, чтобы добавлять их в иерархию View.

VirtualDisplay выводит свои выходные данные в необработанный графический буфер (доступ осуществляется через getSurface()), а не на какой-либо фактический дисплей устройства. Это позволяет Flutter чередовать представление Android View внутри своего собственного дерева виджетов. Он берет текстуру из выходных данных VirtualDisplay и обрабатывает ее как текстуру, которая связана с любым другим виджетом Flutter в его внутренней иерархии. Некоторые взаимодействия с платформой, такие как управление клавиатурой и специальные возможности, могут не работать.

2. Hybrid composition «прокидывает» нативный View в Fluttter.

Управление клавиатурой и доступность работают «из коробки». До Android 10 этот режим может снизить fps интерфейса Flutter. Но в документации команда Flutter подчеркивает — используйте AndroidView (Virtual displays) когда это возможно, поскольку для этого требуется меньше шаблонного кода, чем для AndroidViewSurface, и нет никакой разницы в производительности или других компромиссах.

В iOS есть возможность использовать только Hybrid composition. А виджет называется UiKitView.

Помните, что PatformView отвечает только за отображение, что бы еще подкрутить логику из натива нужно настроить общение между Flutte - native через MethodChannel, и там уже передавать данные и вызывать методы для изменения ui в нативном view. Такое решение в любом случае компромисс скорости реализации и производительности.
🔥12👍5
Hola, Amigos!

На связи Саша Чаплыгин. Выпустили новую статью-перевод на Habr о том, что ждет направление Flutter в 2023 году.

Из статьи вы узнаете:
- о 4 направлениях Flutter, которые планируют развивать в 2023 году;
- над чем уже сейчас работает команда Flutter;
- получите много ссылок на полезные материалы.

Прочитать статью можно здесь. Оставляйте комментарии, какие по-вашему мнению направления стоит развивать?
👍13🔥6
Паттерны проектирования во Flutter, ч.1

Hola, Amigos! С вами Саша Чаплыгин, Flutter-dev Amiga. В этом посте расскажу о паттернах проектирования во Flutter. Поехали!

Что такое паттерны проектирования?

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

Эти паттерны помогают разработчикам находить оптимальное решение для различных задач и уменьшить вероятность ошибок. Flutter предоставляет различные паттерны проектирования для улучшения организации и структурирования вашего кода.

Вот часто встречающиеся паттерны проектирования при разработке мобильных приложений на Flutter:

1. BLoC (Business Logic Component).

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

2. Provider.

Это паттерн, который используется для управления состоянием приложения. Он обеспечивает простой и гибкий способ передачи состояния между различными виджетами в приложении, что упрощает разработку и поддержку кода.

3. MVC (Model-View-Controller).

Он разделяет приложение на три основных компонента: модель (Model), представление (View) и контроллер (Controller). Это позволяет отделить логику отображения от бизнес-логики приложения и облегчает тестирование кода.

4. ScopedModel.

Паттерн, который используется для управления состоянием в приложении. Он обеспечивает удобный и простой способ передачи состояния между виджетами, что упрощает создание и поддержку приложений.

5. Redux.

Это паттерн управления состоянием, который использует однонаправленный поток данных. Он предоставляет удобный и простой способ управления состоянием в приложении, что упрощает создание и поддержку кода.

В следующем посте расскажу о еще 6 паттернах.
👍138👎1
Паттерны проектирования во Flutter, ч.2

Hola, Amigos! С вами Саша Чаплыгин, Flutter-dev Amiga. Продолжаю рассказывать о паттернах проектирования во Flutter. Подробнее о том, что такое паттерны проектирования я рассказал в этом посте.

1. Singleton.
Паттерн, который используется для создания единственного экземпляра класса в приложении. Он обеспечивает простой и гибкий способ доступа к общим данным и методам в приложении.

2. MVVM (Model-View-ViewModel)
Этот паттерн позволяет разделить пользовательский интерфейс от бизнес-логики и модели данных. ViewModel — это слой, который связывает модель данных и пользовательский интерфейс.

3.RxDart

В это паттерне предоставляется функциональность RxJava, RxJS и RxSwift. Он позволяет использовать реактивное программирование для управления потоками данных в приложении.

4. Adapter.

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

5. Observer.

С его помощью объектам можно оповещать другие объекты об изменениях своего состояния. Это позволяет обмениваться информацией без необходимости знать о друг друге.

6. Decorator.

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

Конечный выбор паттерна зависит от конкретных требований проекта и личных предпочтений разработчика. Использование паттернов проектирования помогает улучшить организацию и структурирование кода, а также повысить его качество и поддерживаемость.
👍10🔥3
Hola, Amigos!

Наши друзья из CreativePeople прямо сейчас в прямом эфире празднуют свое 20-летие (с чем мы их, конечно же, поздравляем🥳)! На протяжении всего года агентство будет проводить интересные приколюшки: стрим с основателями, конкурсы на лучшее видеопоздравление, оживительные истории, шутки-прибаутки и другой интерактивчик. Кому актуально, присоединяйтесь)
Forwarded from CreativePeople
Никогда такого не было и вот опять — креативные люди что-то придумали 🤘

Нам 20 лет — и в честь этого большого события проводим специальный стрим с основателями агентства. Расскажем про развитие одного из крутейших диджитал-агентств, как мы научились адаптироваться под любые условия и делать круто вообще всегда 🔥

Когда: 13 апреля в 17:00
Где: канал «Одной ногой в диджитал».
Кто будет: креативный директор Сергей Калюжный, дизайн-директор Александр Ковальский и директор по развитию Сергей Прокофьев.
Ведущий: Валерий Пеньков.

А чтобы не забыть о дне Х, сделали для вас события, которые можно добавить в свой календарь:
Google-календарь
Яндекс.Календарь
🔥5
Hola, Amigos!

Выпустили новый кейс о том, как разработали мобильном приложении на Flutter с нуля за 3 месяца для компании праздничных товаров и воздушных шаров Brav-o.

О чем вы узнаете из кейса:
- почему мы снова выбрали Flutter;
- подробности о каждом этапе разработки;
- почему выбрали тестирование методом черного ящика.

Будем рады вашим лайкам и комментариям! Если есть вопросы, пишите, на все ответим.
🔥13👏4👍21🤮1
Подборка статей о мобильной разработке на Flutter

Hola, Amigos! Наш тимлид Flutter-направления Тимур Моисеев собрал дайджест статей, которые стоит почитать (а еще полезный бонус).

Перспективы развития Flutter

Это статья-перевод от нашего Flutter-разработчика Саши Чаплыгина. После мероприятия Flutter Forward команда Flutter написала краткую выжимку о планах развития Flutter в 2023 году. В этой статье вы узнаете о том, над чем уже сейчас работает команда Flutter и какие 4 направления приоритетны в этом году.

In App Update - The Flutter Way

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

Dragging, zooming and placing object on indoor map with Flutter

Нестандартная задача, но не менее интересная. Если нужно масштабировать и двигать картинку, на которую нужно наложить объекты, чтобы было все связанно и красиво. В статье вы узнаете, как это реализовать на практике.

Бонусом добавил пакет для текстовой маски.
🔥9👍41
Middle Flutter-dev в Amiga

Hola, Amigos!

Amiga растет, поэтому сейчас мы расширяем штат и находимся в поисках middle Flutter-разработчика для создания больших и мощных проектов.

Тебя ждут работа над большими и сложными задачами и крупные кейсы 😏

Нам важен твой опыт в коммерческой разработке на Flutter и в нативе, поэтому без выпущенных приложений в портфолио не обойтись. Общие знания программирования тоже нужны, а у идеального кандидата вообще есть сильное владение и понимание архитектурных паттернов BLoC/ Cubit / Provider.

Мы аккредитованная IT-компания, работаем строго в белую, с нами можно работать из любой точки мира. Узнать про другие плюсы и подробнее ознакомиться с вакансией можно здесь. Присылайте резюме, сопроводительные письма и примеры опубликованных приложений нашему Group Lead HR Кате.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52👍2
Hola, Amigos!

Ну что, темы на май очевидны, мы остановимся на 2:

1. Интересные библиотеки и плагины для разработки на Flutter.
2. Личный опыт: с какими трудностями сталкиваемся и как решаем?

А в июне расскажем обо всем остальном, что было в опросе. Разрыв совсем небольшой, понятно, что все темы интересны. А чтобы оставаться на связи и пообщаться на тему Flutter-разработки — вступайте в чат канала.
🔥8
Hola, Amigos!

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

Мы 19 по Москве и 35 по России среди лучших веб-студий по разработки мобильных приложений в Рейтинге Рунета 2023! Кроме того, мы вошли в топ-100 комплексных digital-агентств и заняли 75 место. А еще нас признали одним из лучших digital-подрядчиков по Москве и России.

Это наш первый рейтинг, и уже такие успехи. Всего 2 года на рынке, и уже в топах одного из лучших рейтингов для веб-студий.

Спасибо большое команде, которая делает невозможное реальным, спасибо клиентам, которые доверяют нам свои мечты и идеи. Дальше больше!
🔥19👍76👏3🎉3🏆3
Личный опыт: проверка на новую версию

Hola, Amigos! На связи Тимур Моисеев, TeamLead Flutter.

Недавно столкнулись с ситуацией, где у пользователей перестала работать проверка новой версии в магазине. Для проверки использовали пакет upgrader.
В результате выяснилось, что некоторые операторы связи блокируют доступ к адресу https://play.google.com, без подключенного VPN на телефоне запрос не проходит.

Решения

Вариант 1:
Пакет upgrader позволяет получить информацию о версии приложения не из магазине, а со стороннего адреса, который вы укажете в настройках (см. картинка 1.)

По указанному адресу нужно положить файл формата xml:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="https://www.andymatuschak.org/xml-namespaces/sparkle">
<channel>
<title>Debt Now App - Appcast</title>
<item>
<title>Version 1.15.0</title>
<description>Minor updates and improvements.</description>
<pubDate>Sun, 30 Dec 2018 12:00:00 +0000</pubDate>
<enclosure url="https://play.google.com/store/apps/details?id=com.moonwink.treasury" sparkle:version="1.15.0" sparkle:os="android" />
</item>
</channel>
</rss>

Вариант 2:
Мы пошли вторым путем и отказались от использования зависимости — upgrader.

В качестве файла с данными по версиям стали использовать json вместо xml. Кто-то спросит, почему не использовать запрос к серверу для получения актуальной версии приложения. Все просто — экономия времени backend-разработчика.

Суть осталась прежней:

1. Делаем запрос по адресу для получения нашего файла с версиями (см. картинку 2).

2. С помощью пакета package_info_plus получаем версию приложения.

3. Сравниваем версии.

Если вышла новая версия, тогда для каждой платформы отправляем пользователя обновить приложение.

Адреса для обновления: Android, IOS.
👍10🔥3👌2
Фестиваль спорта и технологий для ИТ-специалистов

Hola, Amigos!

18 июня в Измайловском парке AGIMA проведет спортивный фестиваль для IT-специалистов RUNIT.

В этом году RUNIT пройдет в 4 раз. 3 тысячи специалистов соберутся в одном месте в одно время. Будут и те, кто придет поболеть за друзей и коллег. И мы хотим, чтобы нас было еще больше!

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

Участников ждет не только забег, но и различные активности. Например, можно встретиться с нами и попрыгать на скакалках на время за крутые призы от Amiga. А еще будет полевая кухня и анлимитед бар с безалкогольными напитками.

Регистрация тут. До встречи на забеге 18 июня в Измайловском парке!
🔥8👍1🤯1
Talker и Collection

Hola, Amigos! На связи Сергей Климович, Flutter-dev Amiga и Тимур Моисеев, TeamLead Flutter. Сегодня поговорит о двух пакетах: Talker и Collection.

Talker

Talker — это пакет логгирования для Flutter, который предназначен для упрощения записи, отслеживания различных событий и сообщений во время разработки приложений. Конечно, один из популярных пакетов логгирования для Flutter — это logger, но сегодня не о нем.

Какие есть преимущества у пакета Talker:

1. Работает с различными State managements. Для Bloc есть отличное «расширение» — talker_bloc_logger.
2. Работает с инструментами отчетности о сбоях (Firebase Crashlytics, Sentry и д.р.).
3. Выводит журналы без отдельной реализации пользовательского интерфейс.
4. Дает возможность делиться журналами и отчетами о сбоях из коробки.
5. Есть расширение для Dio.
6. Можно расширять Talker для своих задач.

Демо на тест тут.

Collection (см. картинку)

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

А также есть много дополнительных методов упрощающих работу со списками.
🔥12👍63👎1
Hola, Amigos!

А мы к вам с новой вакансией. В команду Amiga ищем рекрутера с опытом в IT от полугода. Самое важное — драйв и огонёк в глазах, который разжигается до кострища от новых задач🔥

Подробности по ссылке.
Все, кому откликается — пишите Кате @ekaterina_spesivykh.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Hola, Amigos!

Мы заняли 63 место в рейтинге лучших мобильных разработчиков России по версии Tagline 2023🏆

Это еще одна важная для нас победа. За 2 года на рынке мы попали в 2 самых главных рейтинга России по мобильной разработке. Без нашей крутой команды ничего бы не вышло, спасибо вам большое! А еще спасибо заказчикам за доверие. Такие достижения мотивируют расти и не останавливаться, значит, мы на верном пути.
🔥17🎉5🏆3👍1
Hola, Amigos!

Недавно вышла новая версия Flutter 3.10. Мы перевели статью одного из разработчиков Flutter и поделились ею на Habr. Почитать 1 часть можно тут. В ней мы рассказываем о новых и обновленных компонентах фреймворка. На следующей неделе выпустим вторую часть про изменения в веб-разработке на Flutter.
👍12🔥6
Пакеты, которыми мы часто пользуемся ч.1

Hola, Amigos! На связи вся команда Flutter в Amiga. Собрали список из must-have пакетов на Flutter, которые используем сами.

1. Пакет mask_text_input_formatter

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

Когда пользователь введет что-то в поле ввода, значение скорректируется автоматически: добавятся знаки препинания и тире, удалятся ненужные символы, обрежутся пробелы и изменится регистра слов.

Параметр "inputFormatter" в TextFormField или TextField позволяет разработчикам передавать список классов типа TextInputFormatter для определения поведения поля. TextInputFormatter преобразует значение поля в текст, а текст — в значение поля.

2. Пакет yandex_mapkit

Этот пакет используют для интеграции Яндекс-карт.
Ключевой плюс — большой спектр настроек карты, что позволяет сделать карту именно такой, какой вы хотите её видеть.

У yandex_mapkit есть список примеров в репозитории GitHub (ссылка на странице пакета), которые дают быстро освоить возможности пакета.

Также весомым плюсом является оптимизация пакета, карта будет хорошо работать даже при наличии нескольких сотен объектов карты (MapObject).

3. Пакет camera 0.10.5+2

В наше время сложно найти мобильное приложение, которое не взаимодействует с камерой устройства.
Вот единственный и незаменимый пакет по работе с камерой. Аналогов, покрывающих весь функционал пакета, действительно нет (мы искали).

Он пригодится, чтобы:
- получить live-stream c камеры;
- сделать запись видео;
- получить изображение с камеры;
- работать с выбранной камерой из доступных на устройстве.

Во второй части расскажем еще несколько незаменимых пакетов для нас.
🔥14👍5💩1