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 #595 · Back to latest

Older Posts 12 shown
Post #594 1.25K
Hola, Amigos! Собрали в одну подборку все посты мая, которые вы могли пропустить. Выбирайте, что интересно, и переходите по ссылкам для полезного выходного чтива:

🟡 Прокачиваем локальный поиск на Dart и Flutter
🟡 Полезные сниппеты для жизненного цикла виджета
🟡 Полезные extensions для DateTime
🟡 Как понять, нужна ли библиотека и как ее выбрать?
🟡 Обзор плагина Flutter Intl для IDE
🟡 Краткий обзор Dart 3.12 и Flutter 3.44
🟡 Оптимизируем кастомные анимации

Всем хорошего кода!

P.S. Завтра ждем вас на квартирнике “Мифическая кроссплатформа” на CodeFest в Новосибирске!
  • 👍 1
  • 🔥 1
Post #593 1.18K
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня разберем два виджета, которые помогают оптимизировать производительность анимаций - AnimationBuilder и TickerMode.

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


AnimatedBuilder(
animation: _controller,
child: Container(
width: 200.0,
height: 200.0,
color: Colors.green,
child: const Center(child: Text('Whee!')),
),
builder: (BuildContext context, Widget? child) {
return Transform.rotate(
angle: _controller.value * 2.0 * math.pi,
child: child,
);
},
),


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

Работает это просто. Где-то сверху оборачиваем наш экран в TickerMode и передаем ему переменную в свойство enabled. Но работать будет, только если контроллеры анимаций завязаны на TickerProviderStateMixin и SingleTickerProviderStateMixin.


TickerMode(
enabled: _enabled,
child: ...
);


Делитесь в комментариях, используете ли данные виджеты у себя на проектах?
  • ❤ 8
  • 👍 1
  • 🔥 1
Post #592 1.22K
Hola, Amigos! В рамках Google I/O 2026 были представлены Dart 3.12 и Flutter 3.44. Давайте вместе разберемся, что в них нового.

Начнем, конечно же, с Dart. Тут добавился новый функционал - приватные именованные параметры. Теперь мы можем добавлять наши приватные переменные в конструктор.

Как это было в старых версиях:


class MyClass {
final String _myVar;

const MyClass({required String myVar}) : _myVar = myVar;
}


Как это выглядит теперь:


class MyClass {
final String _myVar;

const MyClass({required this.myVar});
}


А при использовании ничего не поменялось:


final a = MyClass(myVar: ‘my value’);


Еще из того, что добавилось:
🟡В экспериментальной фазе находятся обновленные конструкторы для классов;
🟡Добавилась нативная поддержка Git LFS;
🟡Запустили превью Genkit Dart.

Flutter 3.44 приносит нам 2 больших и важных изменения, для которых нужно будет проводить миграции, если этого еще не сделано:
🔴Повышение версии Android Gradle Plugin до версии 9.0 и переход на использование Kotlin. Пока временно есть обратная совместимость.
🔴Переезд на Swift Package Manager, который очень ждали.

Еще изменения в фреймворке:
🟡Переработана система обнаружения Widget Preview, что уменьшило потребление памяти;
🟡Добавлена поддержка Apple Silicon для macOS приложений без необходимости использования Rosetta;
🟡Для Android добавлен Hybrid Composition++ для отрисовки нативных виджетов, который производительнее обычного Hybrid Composition;
🟡Много других, более мелких изменений.

Делитесь в комментариях, как вам обновление и смотрели ли Google I/O 2026?
  • 👍 7
  • ❤ 6
  • 🔥 3
  • 🥱 1
Post #587 1.06K
Hola, Amigos! Продолжаем рассказывать вам о полезных плагинах для Android Studio и VS Code. Сегодня на очереди плагин, который заменит нам ручное использование CLI-инструмента - Flutter Intl. Он позволяет автоматизировать нашу работу с i18n.

Делитесь в комментариях, что лучше, плагин или CLI?

#плагины
  • 👍 5
  • ❤ 1
Post #586 1.27K
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Для многих задач уже есть готовые библиотеки, но иногда нужно удостовериться, а действительно ли та или иная библиотека нужна в разрабатываемом приложении? Ловите наш чек-лист по выбору библиотек и проверке необходимости их применения.

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

⚪️Сколько времени в будущем сэкономит использование библиотеки?
⚪️Насколько сложно будет написать такой функционал своими силами?
⚪️Есть ли у команды опыт для реализации такого функционала?

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

Если вы уже знаете саму библиотеку и использовали ее, то берите. Если еще нет или вы в первый раз ищите под такой функционал, то нужно смотреть на:

⭕️Дату последнего обновления библиотеки. Чем она ближе к текущей, тем лучше
⭕️Частоту обновления. Это может означать, что разработчик не забросил эту библиотеку и активно ее развивает
⭕️Количество скачиваний на pub.dev. Если их мало, то с такой библиотекой лучше не связываться
⭕️Issues на Github, если код открыт. Поможет понять, какие есть проблемы.
⭕️Прочитать ReadMe на предмет документации. Чтобы там не было всего пару строк, а было понятно, как использовать библиотеку

Если у вас большой опыт в Dart и Flutter, дополнительно можно посмотреть:

🟡Зависимости. Там не должно быть ничего лишнего
🟡Код библиотеки. Он должен быть понятен вам
🟡API Reference. Если библиотека плохо документирована, то лучше от нее отказаться

Рассказывайте в комментариях, а как вы выбираете библиотеки для своих проектов?
  • 👍 5
  • 🔥 4
  • ❤ 2
Post #585 1.26K
Hola, Amigos! Продолжаем рубрику с полезными extensions. Сегодня поговорим про расширение DateTime.

Можно получить информацию совпадает ли дата с сегодняшней, вчерашней или завтрашней:


extension DateTimeX on DateTime {
bool get isToday {
final now = DateTime.now();
return day == now.day && month == now.month && year == now.year;
}

bool get isTomorrow {
final tomorrow = DateTime.now().add(Duration(days: 1));
return day == tomorrow.day + 1 && month == tomorrow.month && year == tomorrow.year;
}

bool get isYesterday {
final yesterday = DateTime.now().subtract(Duration(days: 1));
return day == yesterday.day - 1 && month == yesterday.month && year == yesterday.year;
}
}


Можно получить сколько дней разницы до сегодня:


extension DateTimeX on DateTime {
int get daysDiff => this.difference(DateTime.now).inDays;
}


Делитесь в комментариях, про расширения для каких классов вы еще хотите узнать?

#extensions
  • 👍 9
  • 🤣 3
  • ❤ 1
Post #584 1.21K
Hola, Amigos! Начинаем новую рубрику, где будем рассказывать вам про полезные Snippet’ы, которые вы можете добавить к себе в IDE для ускорения разработки. В дальнейшем ее найдете по хештегу #snippet. Сегодня поговорим про сниппеты для жизненного цикла StatefulWidget.

Сниппет для быстрого добавления initState - initS:


@override
void initState() {
super.initState();

// Your code here
}


Сниппеты для быстрого добавления dispose - dis и disF:


@override
void dispose() {
// Your code here

super.dispose();
}



@override
Future<void> dispose() async {
// Your code here

super.dispose();
}


Пишите в комментариях, про какие сниппеты рассказать в следующий раз?
  • 👍 5
  • 🔥 4
  • 👏 3
Post #583 1.18K
Hola, Amigos! Наш Mobile Team Lead Павел Гершевич примет участие в активности под названием “Квартирник” на конференции CodeFest 16.

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

Почему одни фреймворки постоянно на слуху, а про другие мы не видим множества статей и докладов?
Есть ли границы у кроссплатформы? Можем ли мы написать одно приложение под все существующие устройства?
В чем преимущества и недостатки кроссплатформы?

Готовьте вопросы и приходите пообщаться с Павлом лично. Встречаемся 30 мая в 15:00 (11:00 МСК) на "Квартирнике" в Новосибирске!

Ссылка на квартирник
  • 🔥 5
  • ❤ 2
  • 👍 2
Post #582 1.67K
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga.

Иногда бэкенд не может помочь с поиском по строкам или его нужно реализовать полностью на локальных данных. Мы столкнулись именно с такой задачей.

В новой статье на Хабре разбираем, как прокачать локальный поиск с помощью математических алгоритмов и делимся нашим опытом реализации на Dart & Flutter.

🔗 Ссылка на статью

Делитесь в комментариях, сталкивались ли вы с похожими кейсами?
  • 👍 5
  • 🔥 2
  • 👏 2
Post #581 1.32K
Дайджест марта-апреля

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

🟡Кеширование картинок
🟡Пагинация на Flutter. Часть 1 и часть 2
🔴Статья про обновление токена при помощи Dio
🟡AppLifecycleState
🟡Создаем собственные snippets. В Android Studio и в VS Code
🟡Выбираем лицензию для библиотеки
🟡Полезные extensions для String
🟡Обфускация сборок
🟡Плагин Bloc для IDE
🟡RichText vs Text.rich
🟡Совершаем действия при тряске телефона

Всем хорошего кода!
  • ❤ 3
  • 🔥 2
  • 👏 2
Post #576 1.2K
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня мы разберем один интересный кейс - как сделать так, чтобы какое-то действие в приложении совершалось тогда, когда мы трясем телефон.

В этом нам конечно же помогут 2 популярные библиотеки - sensors_plus и rxdart.

Пишите в комментариях, какое действие вы бы завязали на такой триггер?

P.S. А мы завязали один из триггеров открытия Amiga Dev Screen, который уже скоро вы сможете добавлять в свои проекты.
  • 👍 12
  • 🔥 7
  • ❤ 3
Post #575 1.02K
Hola, Amigos! Сегодня мы посмотрим, чем отличаются 2 виджета для вывода текста - RichText и Text.rich, а также разберемся, какой из них лучше использовать.

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


RichText(
text: TextSpan(
children: [
TextSpan(text: ‘Обычный текст. ‘, style: TextStyle(fontSize: 14, color: Colors.black)),
TextSpan(text: Жирный текст. ‘, style: TextStyle(fontSize: 14, color: Colors.black, fontWeight: FontWeight.bold)),
TextSpan(text: ‘Снова обычный текст.‘, style: TextStyle(fontSize: 14, color: Colors.black)),
],
),
);


С другой стороны, нам нужно каждый раз применять стиль текста к RichText, а также передавать ему textScaler. Эту проблему можно решить при помощи Text.rich, но он уже менее гибкий, чем RichText, так как в нем сложнее сделать что-то по-максимуму кастомное.


Text.rich(
TextSpan(
children: [
TextSpan(text: ‘Обычный текст. ‘),
TextSpan(text: Жирный текст. ‘, style: TextStyle(fontSize: 14, color: Colors.black, fontWeight: FontWeight.bold)),
TextSpan(text: ‘Снова обычный текст.‘),
],
),
);


Получается, что для большинства случаев нам подойдет именно Text.rich, а RichText нужен для максимальной кастомизации.

Рассказывайте в комментариях, какой из них чаще используете в своей работе?
  • 👍 6
  • ❤ 2
  • 👎 1
  • 🔥 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 →