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

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

Всей командой компании Amiga мы поздравляем вас с наступающим Новым Годом🎊

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

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

Счастья, здоровья и удачи в Новом 2023 году🎄
🔥153🎉3🎄32👍1🎅1
This media is not supported in your browser
VIEW IN TELEGRAM
🥰86🎉1
Flutter и каналы общения с нативом

Hola, Amigos, и с первым рабочим! На связи Антон Мартышков, Flutter-dev Amiga. Сегодня расскажу о 3 механизмах для связи между вашим кодом Dart и кодом платформы.

Бывает, что при создании приложения нужного плагина нет. Например, если это что-то специфичное, типа КриптоПро. И в таком случае выход будет один — реализовывать решение нативно и пробрасывать вызовы с Flutter в натив и обратно. Кроме известного MethodChannel еще существуют MessageChannel и EventChannel, и сегодня мы вкратце рассмотрим их.

MethodChannel — его знают все, кто хоть раз пытался настроить общение с нативом. Позволяет вызвать метод в нативной части и/или Dart, так же можно передавать параметры для метода и вернуть результат, если требуется.

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

MessageChannel — двустороняя связь Dart с нативом, настраивается под конкретный, примитивный тип данных, которым и будет вестись «общение», делается это установлением кодека для MassageChannel.

Варианты кодеков:
- StringCodec — кодирует строки с помощью utf-8.
- BinaryCodec — общение байтами, удобно, когда не нужно кодирование/декодирование данных.
- JSONMessageCodec — во время кодирования значения преобразуются в строки json, а затем в байты с использованием utf-8.
- StandardMessageCodec — стандартный кодек для канала связи во Flutter. По значениям расширяет JSONMessageCodec, добавляя возможность передавать uint8list и подобные, а так же map с не строковыми ключами. Возврат ответа обязательно.

Еще подробнее про каналы общения между платформами можно почитать здесь.
👍9🔥7
Hola, Amigos!

Сегодня пишем не о Flutter, а помогаем отделу Back-end Amiga. У нас расширяется Laravel-команда, поэтому ищем Teamlead и Middle-разработчика. Важны опыт на предыдущих проектах, знание PHP и Laravel и желание развиваться.

Работать можно удаленно или гибридно с посещением офиса в центре Москвы, оформление полностью белое, интересные проекты гарантированы.

Узнать больше и оставить отклик на Teamlead тут, а на Middle тут.
🔥3
Flutter Forward

Hola, Amigos!

25 января c 17:30 пройдет онлайн-ивент Flutter Forward от разработчиков фреймворка Flutter. Рекомендуем зарегистрироваться и посмотреть прямую трансляцию из Найроби, Кения (это бесплатно).

Что будет на ивенте?

1. Основной доклад
Разработчики покажут, над чем работали в 2022 году, и расскажут, как ускорить разработку пользовательского интерфейса.

2. #AskFlutter в прямом эфире
На сессии вопросов-ответов можно задавать свои вопросы.

3. Технические доклады
Организаторы обещают позвать крутых спецов, чтобы на конкретных примерах рассказать о том, что может Flutter.

На сайте мероприятия есть интересный интерактив 17 days of flutter, марафон контента о Flutter с любопытными статьями, видеоуроками и заданиями.
👍63🔥1🐳1
Полезные мысли из книги Роберта Мартина «Идеальный программист»

Hola, Amigos! На связи Антон Мартышков, Flutter-dev Amiga. Для меня важной составляющей профессии является самообучение, нужно постоянно расти и отрабатывать полученную теорию на практике, развиваться не только технически, но и софтово. Программирование — это марафон, где нужно регулярно развиваться, что бы не сойти с дистанции.

Уже несколько раз мы рекомендовали к прочтению книгу Роберта Мартина Идеальный программист. Она не техническая, но о нашей работе. Недавно я ее перечитал и собрал несколько отзывающихся мне тезисов:

⁃ Каждая написанная вами строка кода должна быть протестирована. Точка.

⁃ Преданность делу и профессионализм проявляются в дисциплине, а не в продолжительности работы.

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

⁃ Запланируйте 60 рабочих часов в неделю. Первые 40 вы работаете на своего работодателя, а остальные 20 на себя. В эти 20 часов вы читаете книги, практикуетесь, учитесь и иным образом развиваете свою карьеру.

⁃ Настоящий профессионал знает, что добавление функциональности в ущерб структуре – последнее дело. Структура кода обеспечивает его гибкость. Нарушая структуру, вы разрушаете будущее кода.

⁃ Если вы хорошо знаете, что сделать страницу к завтрашнему дню невозможно, то отвечая: «Хорошо, я попытаюсь», вы не выполняете свою работу. Выполнить ее в этот момент можно только одним способом: сказать: «Нет, это невозможно».

⁃ Самый лучший способ чему-то научиться – учить других. Факты запоминаются быстрее всего тогда, когда вы должны их сообщить другим людям, за которых вы отвечаете.

Больше интересных мыслей можно найти в самой книге. Следуя принципам из нее, получится стать надежным и полезным участником команды, а ваши продукты станут успешнее.
👍25🔥4🤔2🤩2
Hola, Amigos!

Коллеги из AGIMA написали об обновлениях Flutter 3.7.0. В посте много ссылок для собственного изучения, все как мы любим.
👍6🔥3
Всем привет! Я Саша Ворожищев, Flutter Teamlead в AGIMA. Поэтому не могу пропустить эту новость: вышел Flutter 3.7.0. Постараюсь коротко рассказать, что в нем нового.

1. Поддержка Material 3.

Потыкать можно тут: https://flutter-experimental-m3-demo.web.app/#/.

2. Поддержка верхнего и каскадного меню для десктопных версий приложения.

https://api.flutter.dev/flutter/widgets/PlatformMenuBar-class.html.

3. Кастомизированное контекстное меню.

https://master-api.flutter.dev/flutter/cupertino/CupertinoTextField/contextMenuBuilder.html.

4. Новые виджеты CupertinoListSection и CupertinoListTile: отображения списка виджетов в стиле iOS.

https://api.flutter.dev/flutter/cupertino/CupertinoListSection-class.html

https://api.flutter.dev/flutter/cupertino/CupertinoListTile-class.html

5. Улучшение физики прокрутки и работы со списками. Также добавили новые виджеты: Scrollbars, DraggableScrollableSheet, AnimatedGrid и SliverAnimatedGrid.

https://api.flutter.dev/flutter/material/Scrollbar-class.html

https://api.flutter.dev/flutter/widgets/DraggableScrollableSheet-class.html

https://api.flutter.dev/flutter/widgets/AnimatedGrid-class.html

https://api.flutter.dev/flutter/widgets/SliverAnimatedGrid-class.html

6. Улучшение инструментов локализации. Был полностью переписан gen-l10n. Добавили работу с формами множественного числа.

https://docs.flutter.dev/development/accessibility-and-localization/internationalization

7. Замена движка Skia на Impeller. Почти. Новый движок обещает быть более быстрым и производительным при компиляции под iOS. Почему «почти»? Доступен он пока только на ветке Stage.

Подробнее:
https://github.com/flutter/flutter/wiki/Impeller

8. Проверка выпуска iOS. При выпуске приложения под iOS, при выполнении команды flutter build ipa будет проверка контрольного списка параметров. Это гарантирует, что приложение готово к отправке в AppStore.

9. Обновления инструментов разработчика. Новые функции включают в себя возможность анализировать текущую выделенную память для приложения с разбиением по классам и частям кода во время выполнения.

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

Подробнее:
https://docs.flutter.dev/development/tools/devtools/memory

10. Работа с изолятами. Теперь Platform Channels можно вызывать из любого изолята. Ранее это можно было сделать только из основного потока.

11. Отключена поддержка Bitcode в iOS.

На самом деле изменений достаточно много, ознакомиться со всеми можно по ссылке ниже:

https://docs.flutter.dev/development/tools/sdk/release-notes/release-notes-3.7.0
👍16🔥6
Hola, Amigos! На связи Саша Чаплыгин, Flutter-dev Amiga.

Перевели и опубликовали новый материал на Habr — 12 методик, которые помогут создавать приложения на Flutter легко и просто. Я сам теперь применяю советы из нее в разработке. Будет полезно почитать разработчикам всех мастей, эта информация будет полезной для решения повседневных рабочих задач.
👍14🔥5👌3
Hola, Amigos!

По недавно вышедшей статье 12 методик, которые помогут создавать приложения на Flutter легко и просто сделали карточки, в которых раскрыли несколько методик. Остальное узнаете в самой статье, прочитать можно по ссылке.
👍11🔥42👎1
Что нового в Android Studio Electric Eel, ч.1

Hola, Amigos! На связи Саша Чаплыгин. Flutter-dev Amiga. Сегодня расскажу об обновлениях в Android Studio Electric Eel. Flutter-разработчики используют Android Studio как IDE для разработки приложений Flutter.

Крашлитика приложений от Firebase Crashlytics

Вы можете просматривать и обрабатывать данные о сбоях приложений из Firebase Crashlytics непосредственно в IDE. Эта интеграция извлекает данные из стека и статистику сбоев из Firebase Crashlytics в новое окно инструмента App Quality Insights в IDE, поэтому вам не нужно переключаться между браузером и IDE.
Благодаря интеграции Android Studio и Crashlytics вы можете писать код и решать основные проблемы сбоев в одном месте. Этот расширенный опыт разработки поможет вам быть в курсе стабильности вашего приложения и свести к минимуму сбоев для ваших пользователей.

Навигация по данным Crashlytics в Android Studio

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

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

2. Используйте раскрывающееся меню идентификатора приложения, чтобы выбрать идентификатор приложения, которое вы хотите проанализировать. Например, пока вы работаете с отладочной версией своего приложения в среде IDE, вам может понадобиться просмотреть данные о событиях для рабочей версии приложения, которую устанавливают ваши пользователи.

3. На панели «Проблемы» отображаются основные события, для которых у Crashlytics есть данные, и они отсортированы по наиболее важным сбоям.

4. На панели «Sample Stack Trace» отображаются сведения о последнем возникновении события, которое вы щелкнули на панели « Проблемы ». Вы можете просмотреть стек вызовов события, чтобы перейти к соответствующим строкам в коде. Также есть информация о затронутом типе устройства, его версии Android и времени возникновения события, а также ссылка на событие на панели инструментов Firebase Crashlytics. Панель инструментов полезна, если вы хотите углубиться и проверить дополнительные трассировки стека, тренды и пользовательские журналы.

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

6. Используйте фильтры, чтобы выбрать или отменить выбор критических или некритических событий.

7. Используйте фильтры диапазона времени и версии приложения, чтобы отточить определенные подмножества событий.
Помимо возможности переходить от стека вызовов к коду, вы также можете переходить от кода к стеку вызовов: Android Studio теперь выделяет строки кода, связанные со сбоями, чтобы вы могли легко обнаруживать и устранять их.
👍13🔥32
Что нового в Android Studio Electric Eel, ч.2 😵‍💫

Hola, Amigos! На связи Саша Чаплыгин, Flutter-dev Amiga. Сегодня продолжу рассказывать об обновлениях в Android Studio Electric Eel.

Эмулятор с изменяемым размером

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

Чтобы использовать эмулятор с изменяемым размером, вам потребуется Android Emulator версии 31.1.3 или выше. Чтобы обновить версии, выберите Tools > SDK Manager. Чтобы создать виртуальное устройство Android (AVD) с изменяемым размером, выполните следующие действия:

1. В процессе создания устройства выберите аппаратный профиль телефона Resizable (Experimental).
2. Загрузите образ системы Android Tiramisu.
3. Следуйте инструкциям, чтобы создать AVD.

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

Зеркалирование устройств

Теперь вы можете отразить свое устройство в окне «Работающие устройства» в Android Studio Electric Eel. Передавая изображение с вашего физического устройства непосредственно в Android Studio, вы можете выполнять стандартные действия, такие как поворот экрана, изменение громкости или блокировка/разблокировка устройства прямо из самой IDE.

Зеркалирование устройств доступно на канале Electric Eel Canary в качестве экспериментальной функции. Чтобы включить его вручную, перейдите File > Settings > Experimental или Android Studio > Preferences > Experimental на Mac и установите флажок рядом с Device Mirroring.

Desktop AVD

Появилась функция проверки приложения на настольных устройствах, таких как Chromebook, с помощью виртуального устройства Android для настольных ПК (AVD). Пользователи часто по-разному взаимодействуют с приложениями на устройствах с большим экраном, и Desktop AVD позволяет вам увидеть, как ваше приложение ведет себя в этой среде. Вот некоторые из уникальных функций, которые вы можете протестировать:

1. Изменение размера приложения: измените размер приложения, перетаскивая края окна.
2. Управление окнами произвольной формы: размещайте приложение в различных местах на экране рабочего стола, а также сворачивайте, разворачивайте и восстанавливайте окно приложения.
3. Уведомления: убедитесь, что уведомления отображаются правильно при извлечении из панели задач на рабочем столе.

В следующем посте расскажу о статистике SDK и о проверке влияния загрузки с помощью Build Analyzer🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4👏2👎1
Что нового в Android Studio Electric Eel, ч.3

Hola, Amigos! На связи Саша Чаплыгин. Flutter-dev Amiga. Это финальная часть об изменениях в Android Studio Electric Eel. Что же еще поменялось?

Статистика SDK
Сведения о зависимостях можно просматривать из нового Google Play SDK Index — общедоступного портала с информацией о популярных зависимостях или SDK. Если определенная версия библиотеки была помечена ее автором как устаревшая, при просмотре этого определения зависимости появляется соответствующее предупреждение Lint. Это позволяет обнаруживать и обновлять проблемы с зависимостями во время разработки, а не позже, когда вы публикуете свое приложение в Play Console.

Обновленный Build Analyzer
Build Analyzer теперь предоставляет сводку времени, затраченного на загрузку зависимостей, и подробное представление загрузок для каждого репозитория. Вы можете использовать эту информацию, чтобы определить, влияют ли неожиданные загрузки зависимостей на производительность вашей сборки.

В частности, вы можете использовать эту информацию для выявления проблем с конфигурацией, таких как использование динамических версий зависимостей, вызывающих непредвиденные загрузки. Кроме того, если вы видите большое количество неудачных запросов к определенному репозиторию, это может указывать на то, что этот репозиторий следует удалить или переместить ниже в конфигурации вашего репозитория.
🔥7👍5👌2👎1
Flutter Deeplinks, ч.1

Hola, Amigos! С вами Антон Мартышков, Flutter-dev Amiga. Я думаю, что каждый хоть раз да сталкивался с необходимостью реализовать диплинки в приложении. В этом посте мы рассмотрим Deep Links для Android и Custom Scheme Links для iOS.

Deeplinks — это обычная ссылка, и мы можем настроить платформы Android и iOS запускать наше приложение и передавать туда данные. Android и iOS похожи в реализации и работе этих механизмов. В Android есть 2 типа ссылок, открывающих приложение: Deep Links и App Links. У iOS также есть 2 типа ссылок: Custom Scheme Links и Uni Links.

Deep Links для Android
В файле android/app/src/main/AndroidManifest.xml внутри <activity>...</activity> необходимо добавить следующий intent-filter:

<meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="customscheme"
android:host="customdomain.com"
android:pathPrefix="/path" />
</intent-filter>

android:scheme — указывается кастомная схема либо http
android:host — указывается имя хоста
android:pathPrefix — опциональный параметр
Такой интент-фильтр будет открывать наше приложение для ссылок вида my-scheme://my-host/my-prefix и my-scheme://my-host/my-prefix*

Протестировать это можно нажатием на саму ссылку (customscheme://customdomain.com/path) или командой ниже:

adb shell am start -a android.intent.action.VIEW -d "customscheme://customdomain.com/path" your-app-package-name

Custom Scheme Links для iOS

Они очень схожи с Deep Links и App Links в Android, но Custom Scheme Links могут иметь только кастомные схемы, но не http и https, для них придумали Uni Links. Для добавления ссылки с кастомной схемой необходимо добавить следующее в info.plist файл:

<key>FlutterDeepLinkingEnabled</key>
<true/>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>customdomain.com</string>
<key>CFBundleURLSchemes</key>
<array>
<string>customscheme</string>
</array>
</dict>
</array>

Причем CFBundleURLName необязателен, так как в iOS система смотрит только на CFBundleURLSchemes.

Чтобы проверить работу ссылки, можно открыть симулятор и вызвать команду
xcrun simctl openurl booted customscheme://customdomain.com/1 или customscheme://anything.

Важно: приложение должно быть установлено на устройстве.

В следующем посте я расскажу про продвинутые диплинки, которые при отсутствии приложения на устройстве ведут на GooglePlay или AppStore для его установки.
🔥19👍6