TGViewer
Channel Public Channel
Flutter. Много

Flutter. Много

@flutter_amiga

Заказать мобильную разработку: https://amiga.ru//?utm_source=tg
Заказать рекламу в канале @amiga_agency_bot

Новости Flutter-разработки, дайджесты мероприятий, личный опыт.
Subscribers
2.96K
Photos
460
Videos
24
Links
284

Showing posts older than #419 · Back to latest

Older Posts 13 shown
Post #418 2.85K
Hola, Amigos! Начинаем год с выступлений и зовем вас с собой😍 Присоединяйтесь к нам на FlutterConf — первую Flutter-конференцию в России!

📅 Дата: 21 февраля 2025 года
📍 Место: Москва, 3-я ул. Ямского Поля, 26А

В программе:

• Два потока докладов про реальные кейсы с нестандартными требованиями, архитектурные решения и инструменты для Flutter-проектов.
• Нетворкинг-события — завести полезные знакомства и найти новых единомышленников.
• Экспертная зона — обсудить конкретные вопросы с профессионалами, получить практический совет и понять, как расти в профессии.
• Круглый стол: прошлое, настоящее и будущее Flutter.
• AfterParty, где получится неформально пообщаться с коллегами.

Некоторые из докладов конференции:

→ Павел Гершевич. Mobile TeamLead, Amiga. Доклад: «Многомодульность в Flutter 2.0. Все подходы и что нового»
→ Станислав Чернышев. Доцент СПбГУАП, автор книги «Основы Dart». Доклад: «Жизненный цикл фичи в Dart: от issue до релиза»
→ Максим Ясаков. Flutter-разработчик, Яндекс. Доклад: «ArtVM: встроенная виртуальная микро среда исполнения для Dart»

Полный список тем, подробности и регистрация по ссылке: FlutterConf 2025

Промокод Amiga10 даёт скидку 10% на покупку билетов🔥

До встречи! 🙂
  • 🔥 7
  • ❤ 6
  • 👍 4
Post #417 1.93K
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня мы еще немного обсудим с вами отслеживание включения клавиатуры устройства.

Случаи, когда нам нужно отслеживать

1. Если мы работаем с виджетом, который плохо складывается. Например, платформенные виджеты. В одном из наших кейсов на WebView располагалось текстовое поле, которое на Android начало уходить под клавиатуру. В этом случае мы использовали отслеживание для добавления отступов, что помогло справиться с проблемой.

2. Чтобы выводить дополнительные виджеты сразу над клавиатурой, если она открыта. Например, список emoji или что-то подобное. А также менять что-либо на экране, если нам нужно.

3. Это может быть одним из способов отслеживания, пишет ли пользователь что-то в чат. Все же видели надписи «печатает…» в мессенджерах.

Как мы получили высоту клавиатуры

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

keyboard_height_plugin — позволяет отслеживать не только, открыта ли клавиатура, но и ее высоту. Именно эту библиотеку мы выбрали в итоге.

flutter_keyboard_visibility — самая популярная библиотека, но достаточно сложная в подключении.

Именно эти 2 пакета мы можем порекомендовать к использованию в своих проектах.

Теперь давайте посмотрим, как мы организовали отслеживание. Наш виджет уже и так был Stateful, поэтому работ проводилось немного. Сначала мы добавили объект из библиотеки и создали переменную под размер самой клавиатуры:

final _keyboardHeightPlugin = KeyboardHeightPlugin();
double _keyboardHeight = 0;


И в методе initState подписались на изменения через callback:

_keyboardHeightPlugin.onKeyboardHeightChanged((double height) {
setState(() {
_keyboardHeight = height;
});
});


Не забываем, что сам объект нужно разрушить вместе с виджетом, поэтому добавляем в dispose вот такой вызов:

_keyboardHeightPlugin.dispose();

Теперь можно применить новую переменную для отступа.

Делитесь в чате, были ли у вас похожие случаи?
  • 👍 9
  • 🔥 6
Post #416 1.9K
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня мы поговорим, что делать, если нам нужно совершать какие-либо действия при открытии и закрытии клавиатуры.

Начнем с того, как понять, открыта ли клавиатура. Тут есть несколько методов — через MediaQuery, через WidgetBindings и через библиотеки.

MediaQuery

final bottomInset = MediaQuery.of(context).viewInsets.bottom;
if (bottomInset == 0) {
// клавиатура закрыта
} else {
// клавиатура открыта
}


У этого способа есть большой минус — он не работает на комплексной верстке, а наши приложения чаще всего такие.

WidgetBindings

Второй способ сложнее, но надежнее. Сначала мы должны добавить к нашему классу WidgetBindingsObserver.

class _MyWidgetState extends State<MyWidget> with WidgetBindingsObserver {
...
}


Далее подключаем все:

@override
void initState() {
super.initState();
WidgetBindings.addObserver(this);
}

@override
void dispose() {
WidgetBindings.removeObserver(this);
super.dispose();
}

@override
didChangeMetrics() {
super.didChangeMetrics();
final isKeyboardOpen = WidgetsBinding.instance.window.viewInsets.bottom > 0;
}


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

Библиотеки

Тут достаточно большой выбор таких библиотек. Но наш совет — выбирать те, у которых много скачиваний, они чаще работают.

Во второй части мы расскажем, зачем это нужно и какие библиотеки выбрали мы. Делитесь в чате, были ли у вас случаи, когда нужно было отслеживать клавиатуру?
  • 👍 8
  • 🔥 3
  • 🗿 3
  • ❤ 1
Post #414 1.93K
Hola, Amigos! На связи команда агентства продуктовой разработки Amiga. Сегодня поделимся полезной статьей Flutter-разработчика из Agima и обсудим важную тему — CodeStyle на Flutter-проектах. Единые правила кода помогают избежать хаоса в долгосрочных проектах, где каждый разработчик приносит свой стиль.

Почему это важно?
1. Улучшает читаемость и поддержку кода.
2. Ускоряет ревью и уменьшает ошибки.
3. Упрощает ввод новых участников в команду.

В материале подробно о принципах написания читаемого кода, работе с форматированием и использовании автоматических линтеров ⚙️

Ссылка на статью на Habr ⬅️

А вы внедряли CodeStyle на своих проектах? Делитесь в комментариях!
  • 🔥 8
  • 👍 1
Post #411 2.49K
Hola, Amigos! Сегодня поговорим о подходах к проектированию состояний в BLoC. В Flutter существует два основных подхода для создания состояний: single state и state machine.

📍 Single state
Это класс, содержащий все возможные поля, описывающие состояние BLoC. При изменении любого из этих полей мы создаем новое состояние, полностью обновляя текущий state.

Пример:

class MyBlocState{
final List<Todo> todos;
final bool loading;
final String? failure;
…
}

Использование метода emit для изменения состояния:

emit(MyBlocState.copyWith(
loading: true,
));


📍 State machine
В этом подходе каждое состояние представлено отдельным классом, унаследованным от общего родительского. Похожим способом в BLoC обычно создают события:

abstract class MyBlocState{}

class LoadingState extends MyBlocState{}
class LoadedState extends MyBlocState{
final List<Todo> todos;
…
}
class FailureState extends MyBlocState{
final String failure;
…
}


Для использования такого подхода в BLoC можно эмитить конкретные состояния:

emit(LoadingState());


Какой из этих подходов выбрать — зависит от сложности логики вашего приложения. State machine лучше подходит для сложных сценариев с разными типами состояний, тогда как single state — для простых случаев с минимальными изменениями.

Какой подход вам ближе? Пишите в комментариях!
  • 👍 9
  • ❤ 5
  • 🔥 5
Post #410 2.69K
Hola, Amigos! С наступающим Новым годом🎄

2024 год подходит к концу — быстрый, шумный и полный интересных задач и открытий! Мы вместе с вами писали тысячи строк кода и учились новому. А сейчас отличное время, чтобы сделать паузу и набраться сил для будущих свершений🥂

Желаем, чтобы в 2025 у вас все легко складывалось: код работал стабильно, проекты вдохновляли, а идеи приходили сами собой❤️

Не забывайте находить баланс, отдыхать и наполняться энергией, и до встречи в Новом году!
  • 🎉 9
  • ❤ 5
  • 🔥 4
  • 🎄 2
Post #409 2.75K
Hola, Amigos! На связи команда агентства продуктовой разработки Amiga.

Павел Гершевич, наш Mobile Team Lead написал подробную статью для тех, кто работает с BLoC. В ней вы найдете:

⚙️ Разбор встроенных трансформеров — concurrent, sequential, droppable, restartable.

⚙️ Пример создания кастомного трансформера с debounce для оптимизации работы с событиями.

⚙️ Идеи для разработки сложных трансформеров для объединения и обработки нескольких потоков событий.

Ссылка на статью на Habr ⬅️

Делитесь в чате, кто уже создавал свои трансформеры?
  • ❤ 10
  • 🔥 6
  • 👍 5
  • 🥰 2
Post #408 2.59K
Hola Amigos! Мы так долго ждали и наконец можем поделиться с вами классной новостью😍

🔥Вышел свежий выпуск Flutter Dev Podcast с участием руководителя нашей команды мобильной разработки Павла Гершевича, в котором он вместе с коллегами по рынку обсудил, что нужно знать о многомодульности во Flutter.

В выпуске:

⚙️ Когда и зачем переходить на многомодульность

⚙️ Как правильно подготовить архитектуру приложения

⚙️ Какие инструменты, например Melos, помогут на этом пути

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

Слушать на сайте | Яндекс.Музыка | Spotify | YouTube | Звук | Apple Podcasts | Deezer | CastBox | Overcast | Pocket Casts | Podcast Addict | VK | Саундстрим | Mave-плеер

Делитесь впечатлениями и задавайте вопросы в чате ❤️
  • ❤ 7
  • ⚡ 5
  • 🔥 5
  • 👌 1
Post #407 2.39K
Hola, Amigos! На связи мобильная команда агентства продуктовой разработки Amiga. Вчера прошла презентация FlutterInProduction, где рассмотрели всю десятилетнюю историю нашего любимого фреймворка Flutter.

Да, мы ничего не перепутали, Flutter в этом году исполнилось 10 лет, хотя в самом начале он назывался по-другому и работал только на Android. Весь этот срок Google разделили на 3 фазы:

▫️2014-2018 — экспериментальная фаза

▫️2018-2022 — фаза роста

▫️2022-наст.время — фаза работы в продакшене

Наш Mobile Team Lead Павел Гершевич застал все 3 фазы, поэтому делимся его комментарием:

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


Кроме истории самого фреймворка и историй разработчиков, которые его используют, Google поделились некоторыми планами на наступающий 2025 год:

- Выпуск Impeller для десктопа;
- Появление Preview для виджетов, чтобы видеть верстку до запуска приложения;
- Прямой запуск нативных функций операционных систем без надобности писать Platform Channel;
- Упрощение написания виджетов при помощи добавления декораторов;
- Полный переход на Swift Package Manager для iOS.

Делитесь в чате, когда вы пришли в Flutter и как, по-вашему, он изменился с тех пор.
  • 🔥 6
  • 👍 4
  • ❤ 2
Post #401 2.52K
Hola, Amigos! На связи мобильная команда агентства продуктовой разработки Amiga. Сегодня вышли Dart 3.6 и Flutter 3.27, но эти обновления совсем небольшие, поэтому делимся с вами в карточках самым важным:

- Обновленная работа с монорепозиториями;
- Отступы между виджетами в Row и Column;
- Разделители в больших числах
Pub.dev теперь показывает количество скачиваний пакетов;
- Много-много других небольших новинок.

Делитесь в чате, успели уже попробовать данное обновление?
  • 🔥 21
  • ❤‍🔥 7
  • ❤ 3
Post #399 2.06K
Hola, Amigos! Хотим поделиться с вами классной новостью. 6 декабря прошла церемония награждения премии Tagline Awards 2024 — главной награды за достижения в digital-сфере.

В премии участвует 500+ известных брендов и агентств, а награды вручаются за уровень работ, качество их исполнения и эффективность решения коммерческих задач🔥

Делимся победами! В этом году мы заняли:

🏆 2 место в номинации «Лучшее мобильное MVP-приложение» с кейсом разработки мобильного приложения для сети «Аптека Ваша №1»

🏆 3 место в номинации «Лучший маркетплейс» с кейсом создания первого маркетплейса горного оборудования в России

Спасибо команде за работу и заказчикам за доверие❤️ Такие достижения мотивируют расти и не останавливаться!

Читайте кейсы по ссылкам и пишите свое мнение в чате, мы будем рады вашему фидбеку)
  • 🔥 8
  • ❤ 3
  • 👍 3
Post #398 2.23K
Hola, Amigos! На связи Михаил Чернецов, Flutter Dev в Amiga. Сегодня поговорим об одном из плагинов из набора plus_plugins — connectivity_plus.

Connectivity Plus — простой плагин для проверки сети, позволяющий использовать асинхронную функцию для определения соединений. Например:

final List<ConnectivityResult> connectivityResult = await Connectivity().checkConnectivity();


Однако лучшим способом будет прослушивание потока данных и сохранение в отдельный Singleton — тогда доступ к подключениям можно получить синхронно:

Connectivity().onConnectivityChanged.listen(
(List<ConnectivityResult> result) {
MyConnectivitySingleton.instance.setValue(result);
}
);


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

AppLifecycleListener(
onShow: () async {
await MyConnectivitySingleton.instance.refresh();
},
);


А как вы работаете с изменением состояния сети? Делитесь в чате.
  • 👍 11
  • 🔥 5
  • ❤ 2
Post #397 2.25K
Дайджест ноября

Hola, Amigos! Собрали в одну подборку все полезные посты ноября, которые вы могли пропустить. Выбирайте, что вам интересно, и переходите по ссылкам.

⚪️ Chopper

⚪️ Retrofit

⚪️ Chopper или Retrofit

⚪️ 3 способа хранения ключей и различных переменных

⚪️ Flavors во Flutter. Android. iOS

⚪️ Команда Flutter. Михаил Чернецов

⚪️ Импорты во Flutter

⚪️ Лайфхаки в импортах во Flutter

Всем хорошего кода! 🙂
  • 🔥 7
  • ❤ 4
  • 👏 3
  • 👍 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →