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

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

29 и 30 августа пройдет крупнейшая конференция для руководителей студий и агентств BOOST. Уникальное мероприятие для digital-рынка представляет собой площадку для нетворкинга и шеринга знаний от лидеров индустрии.

5 потоков [впервые! дизайн и digital-маркетинг]
150+ спикеров
1000+ участников

Amiga представят спикеры:

⚙️ Дмитрий Тарасов, СЕО с докладом «Изменения в digital-продакшене при переориентировании на длинные деньги»

⚙️ Артем Салеев, технический директор с темой «Как избежать убытков, когда не попал в оценку?»

⚙️ Константин Франгуриди, Исполнительный директор модерирует направление Дизайн и креатив.

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

Пользуйтесь промокодом AMIGA10 для покупки билетов со скидкой 10%.

До встречи!
Please open Telegram to view this post
VIEW IN TELEGRAM
Hola, Amigos! Что делаете 5-8 сентября? Поехали с нами в Омск на DevFest! Это ежегодная конференция для программистов, которая проводится с целью развития IT‑сообщества.

Будет интересно всем разработчикам: Android, Python, iOS, Web, Аврора, Flutter, Java, .NET, SRE, Documentation.

Мы участвуем уже второй год подряд и в этот раз Amiga будут представлять:

⚙️ Паша Гершевич, Flutter Team Lead с докладом «Логирование на Flutter или какие метрики помогут в оптимизации».

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

Доклад будет полезен Flutter-разработчикам уровня Middle и выше, а также их тестировщикам.

⚙️ Артем Салеев, Технический директор с темой «Перестройка процессов разработки при масштабировании агентства».

Поговорим о реорганизации структуры команды и внедрении инструментов автоматизации: от постановки задач до аналитики. Также сделаем акцент на перестройке себя: трансформации мышления и рефлексии.

Будет полезно техническим специалистам, которые хотят стать TeamLead, TeamLead Backend, CTO.

Конфа пройдет уже на следующей неделе, так что советуем поторопиться с билетами!
Промокод DEVFESTAMIGA даёт скидку 30% и действует до 6 сентября.

До встречи! 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Hola, Amigos!

На связи Михаил Чернецов, Flutter Dev агентства продуктовой разработки Amiga. Сегодня мы поговорим про Draggable, который позволяет перетаскивать виджет по всему пространству экрана.

При передвижении объекта под курсором отображается виджет, передаваемый в свойство feedback. Если необходимо изменить сам виджет, можно передать свойство в childWhenDragging.


Draggable(
data: …, // Данные
feedback: Container(), // Виджет который перетаскивается
childWhenDragging: Container(), // Виджет который заменяет child, когда виджет перетаскивают, необязательный.
child: Container(), // Сам виджет
),


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

Необходимо предоставить ему билдер и опциональные callback onWillAcceptWithDetails, отвечающий за приём Draggable widget и отработку onAcceptWithDetails.

onMove и onLeave — интересные callback, т.к. реагируют не на то, что Draggable был туда передан, а на появление в этой области Draggable.


DragTarget(
builder: (BuildContext context, List<dynamic> _, List<dynamic> _,) {
return Container();
},
onAcceptWithDetails: (DragTargetDetails details) {

},
),


Однажды это нами было использовано, т.к. при драге виджета мы не можем использовать другие жесты, в том числе скролл. На верхней и нижней границе экрана были расположены два невидимых драг таргета, которые начинали движение ScrollController при срабатывании onMove и останавливали движение контроллера при срабатывании onLeave.

Из интересных применений Draggable является также оборачивание виджета в DragTarget. Его нельзя будет перетаскивать, но он будет реагировать на перетаскивание Draggable. Например, когда нужно сделать что-то наподобие ReorderableList, когда можно взять необходимый элемент, а остальные элементы обернуть в DragTarget.

Также существует виджет LongPressDraggable, который перетаскивается только при срабатывание на длительное нажатие и при этом триггерит hapticFeedback (вибрацию).

Всем хорошего кода! Делитесь в чате своим опытом работы с Draggable.
Hola, Amigos!

На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga. Сегодня обсудим кастомизацию иконок по формам и цветам на Flutter. Особенно интересно рассмотреть кейсы с Android выше 12 версии и iOS 18, который пока еще в бете.

Конечно, можно использовать библиотеку flutter_launcher_icons, о которой мы уже рассказывали, но она пока не работает с новыми иконками для iOS. Изменение иконки у приложения — задача достаточно редкая. Давайте посмотрим, как это можно сделать вручную.

👾 Начнем с Android. Можно создать статичные иконки (прямоугольные и круглые), динамическую форму и монохромные, чтобы потом менять цвет.

Для этого понадобится цвет фона или сам фон (только для статичных и динамической формы) и объект на передний план. Всё это в векторе.

Если используем статичные картинки, то их можно подготовить и сделать нужных размеров вручную или при помощи специальных генераторов. Добавляем их в папки /android/app/src/main/res/mipmap-xxxx/ (xxxx заменить на нужный размер) под именами ic_launcher и ic_launcher_round. Далее вписываем код в AndroidManifest:

<application
...
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
...>
</application>


Если хотим динамические картинки, то можно воспользоваться встроенным инструментом в Android Studio. Для этого откройте папку Android вашего проекта как отдельный проект. После нажмите правой кнопкой мыши на res и выберите New -> Image Asset.

Далее выбираем картинку в Foreground и фон в Background. И Android Studio все сделает сама.

Теперь перейдем в res/drawables/anydpi-v26/ic_launcher.xml и добавим монохромную версию. Если она у вас будет отличаться от фона стандартной, то сначала добавьте свое изображение.

<monochrome android:drawable="@drawable/ic_launcher_foreground" />


🤖 На iOS все проще. С приходом iOS 18 придет еще 2 типа иконок: для темного режима (Dark) и окрашенные (Tinted).

Лучше всего попросить дизайнера сделать эти 2 типа иконок и изменить их размер, чтобы вставить в Xcode. Сейчас это делается через Xcode Beta. Для темной темы и окраски можно обойтись прозрачными изображениями в отличии от светлой темы.

Всем хорошего кода! Пишите в чате, как вы кастомизируете иконки на Flutter?
Hola, Amigos!

На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga. Сегодня рассмотрим плагин local_auth. Он помогает добавить в приложение вход через биометрию — отпечаток пальца или лицо.

Для начала работы нужно указать, что приложение использует эту функциональность, и пользователь может дать разрешение на нее. Для Android в AndroidManifest.xml:

<uses-permission android:name="android.permission.USE_BIOMETRIC"/>


Для iOS в info.plist:

<key>NSFaceIDUsageDescription</key>
<string>Причина использования</string>


Когда пользователь доходит до момента включения биометрии, то нужно проверить доступна ли она. Если всё работает, то можно выбрать, что показать на экране: иконку отпечатка или иконку FaceID. На некоторых Android смартфонах могут быть доступны оба типа.

final LocalAuthentication auth = LocalAuthentication();
final canAuthenticateWithBiometrics = await auth.canCheckBiometrics;
final isDeviceSupported = await auth.isDeviceSupported();
if (canAuthenticateWithBiometrics || isDeviceSupported) {
final availableBiometrics = await auth.getAvailableBiometrics();
if (availableBiometrics.contains(BiometricType.face)) {
... // Показываем иконку с лицом
} else if (availableBiometrics.contains(BiometricType.fingerprint)) {
... // Показываем иконку с отпечатком пальца
}
... // Другие действия для выполнения биометрии
}


Чтобы запросить биометрию, выполним следующий код:

try {
final didAuthenticate = await auth.authenticate(
localizedReason: 'Зачем пользователю ',
options: const AuthenticationOptions(biometricOnly: true),
);
... // Другие действия
} catch (e) {
... // Обработка ошибок
}


Но у этого плагина также есть и минусы, о которых мы поговорим на конференции «Стачка» 27-28 сентября в Санкт-Петербурге.

Промокод «спикер_10» подарит вам скидку 10% на билет 🎁

До встречи на конференции!
Hola, Amigos! Рассказываем и показываем в карточках, как прошел BOOST для нас в 2024 году.

А еще раскрываем интригу, кто такая Лидочка! Знакомьтесь с нашим виртуальным менеджером по вашим нецелевым лидам. Переходите в чат, там все подробности⚙️

Проводили лето со всем IT-комьюнити и встретили осень легендарным треком «третье сентября» на афтепати.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM