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
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня мы разберем один интересный кейс - как сделать так, чтобы какое-то действие в приложении совершалось тогда, когда мы трясем телефон.
В этом нам конечно же помогут 2 популярные библиотеки -
Пишите в комментариях, какое действие вы бы завязали на такой триггер?
P.S. А мы завязали один из триггеров открытия Amiga Dev Screen, который уже скоро вы сможете добавлять в свои проекты.
В этом нам конечно же помогут 2 популярные библиотеки -
sensors_plus и rxdart.Пишите в комментариях, какое действие вы бы завязали на такой триггер?
👍12🔥7❤3
Дайджест марта-апреля
Hola Amigos! Собрали в одну подборку все полезные посты марта и апреля, которые вы могли пропустить. Выбирайте, что интересно, и переходите по ссылкам для полезного выходного чтива:
🟡 Кеширование картинок
🟡 Пагинация на Flutter. Часть 1 и часть 2
🔴 Статья про обновление токена при помощи Dio
🟡 AppLifecycleState
🟡 Создаем собственные snippets. В Android Studio и в VS Code
🟡 Выбираем лицензию для библиотеки
🟡 Полезные extensions для String
🟡 Обфускация сборок
🟡 Плагин Bloc для IDE
🟡 RichText vs Text.rich
🟡 Совершаем действия при тряске телефона
Всем хорошего кода!
Hola Amigos! Собрали в одну подборку все полезные посты марта и апреля, которые вы могли пропустить. Выбирайте, что интересно, и переходите по ссылкам для полезного выходного чтива:
Всем хорошего кода!
Please open Telegram to view this post
VIEW IN TELEGRAM
10❤3🔥3👏2
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga.
Иногда бэкенд не может помочь с поиском по строкам или его нужно реализовать полностью на локальных данных. Мы столкнулись именно с такой задачей.
В новой статье на Хабре разбираем, как прокачать локальный поиск с помощью математических алгоритмов и делимся нашим опытом реализации на Dart & Flutter.
🔗 Ссылка на статью
Делитесь в комментариях, сталкивались ли вы с похожими кейсами?
Иногда бэкенд не может помочь с поиском по строкам или его нужно реализовать полностью на локальных данных. Мы столкнулись именно с такой задачей.
В новой статье на Хабре разбираем, как прокачать локальный поиск с помощью математических алгоритмов и делимся нашим опытом реализации на Dart & Flutter.
🔗 Ссылка на статью
Делитесь в комментариях, сталкивались ли вы с похожими кейсами?
👍5🔥2👏2
Hola, Amigos! Наш Mobile Team Lead Павел Гершевич примет участие в активности под названием “Квартирник” на конференции CodeFest 16.
Квартирник - особый формат, где спикеры и эксперты общаются с залом на определенную тему. Павел вместе с Егором Поповым из Открытых Мобильных Платформ обсудят и ответят на вопросы касаемо кроссплатформы:
Почему одни фреймворки постоянно на слуху, а про другие мы не видим множества статей и докладов?
Есть ли границы у кроссплатформы? Можем ли мы написать одно приложение под все существующие устройства?
В чем преимущества и недостатки кроссплатформы?
Готовьте вопросы и приходите пообщаться с Павлом лично. Встречаемся 30 мая в 15:00 (11:00 МСК) на "Квартирнике" в Новосибирске!
Ссылка на квартирник
Квартирник - особый формат, где спикеры и эксперты общаются с залом на определенную тему. Павел вместе с Егором Поповым из Открытых Мобильных Платформ обсудят и ответят на вопросы касаемо кроссплатформы:
Почему одни фреймворки постоянно на слуху, а про другие мы не видим множества статей и докладов?
Есть ли границы у кроссплатформы? Можем ли мы написать одно приложение под все существующие устройства?
В чем преимущества и недостатки кроссплатформы?
Готовьте вопросы и приходите пообщаться с Павлом лично. Встречаемся 30 мая в 15:00 (11:00 МСК) на "Квартирнике" в Новосибирске!
Ссылка на квартирник
🔥5❤2👍2
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
Hola, Amigos! Продолжаем рубрику с полезными extensions. Сегодня поговорим про расширение DateTime.
Можно получить информацию совпадает ли дата с сегодняшней, вчерашней или завтрашней:
Можно получить сколько дней разницы до сегодня:
Делитесь в комментариях, про расширения для каких классов вы еще хотите узнать?
#extensions
Можно получить информацию совпадает ли дата с сегодняшней, вчерашней или завтрашней:
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
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Для многих задач уже есть готовые библиотеки, но иногда нужно удостовериться, а действительно ли та или иная библиотека нужна в разрабатываемом приложении? Ловите наш чек-лист по выбору библиотек и проверке необходимости их применения.
Начнем с того, что нужно определиться, на самом ли деле нужна библиотека. Если это библиотека какого-то сервиса, причем официальная, то ее можно добавлять. Но для других случаев зададим себе несколько вопросов:
⚪️ Сколько времени в будущем сэкономит использование библиотеки?
⚪️ Насколько сложно будет написать такой функционал своими силами?
⚪️ Есть ли у команды опыт для реализации такого функционала?
Если библиотека будет реально экономить время разработчиков, требуемый функционал достаточно сложен или у команды нет необходимого опыта для его реализации - будем выбирать и искать пакет.
Если вы уже знаете саму библиотеку и использовали ее, то берите. Если еще нет или вы в первый раз ищите под такой функционал, то нужно смотреть на:
⭕️ Дату последнего обновления библиотеки. Чем она ближе к текущей, тем лучше
⭕️ Частоту обновления. Это может означать, что разработчик не забросил эту библиотеку и активно ее развивает
⭕️ Количество скачиваний на pub.dev. Если их мало, то с такой библиотекой лучше не связываться
⭕️ Issues на Github, если код открыт. Поможет понять, какие есть проблемы.
⭕️ Прочитать ReadMe на предмет документации. Чтобы там не было всего пару строк, а было понятно, как использовать библиотеку
Если у вас большой опыт в Dart и Flutter, дополнительно можно посмотреть:
🟡 Зависимости. Там не должно быть ничего лишнего
🟡 Код библиотеки. Он должен быть понятен вам
🟡 API Reference. Если библиотека плохо документирована, то лучше от нее отказаться
Рассказывайте в комментариях, а как вы выбираете библиотеки для своих проектов?
Начнем с того, что нужно определиться, на самом ли деле нужна библиотека. Если это библиотека какого-то сервиса, причем официальная, то ее можно добавлять. Но для других случаев зададим себе несколько вопросов:
Если библиотека будет реально экономить время разработчиков, требуемый функционал достаточно сложен или у команды нет необходимого опыта для его реализации - будем выбирать и искать пакет.
Если вы уже знаете саму библиотеку и использовали ее, то берите. Если еще нет или вы в первый раз ищите под такой функционал, то нужно смотреть на:
Если у вас большой опыт в Dart и Flutter, дополнительно можно посмотреть:
Рассказывайте в комментариях, а как вы выбираете библиотеки для своих проектов?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4❤2
Hola, Amigos! Продолжаем рассказывать вам о полезных плагинах для Android Studio и VS Code. Сегодня на очереди плагин, который заменит нам ручное использование CLI-инструмента - Flutter Intl. Он позволяет автоматизировать нашу работу с i18n.
Делитесь в комментариях, что лучше, плагин или CLI?
#плагины
Делитесь в комментариях, что лучше, плагин или CLI?
#плагины
👍5❤1
Hola, Amigos! В рамках Google I/O 2026 были представлены Dart 3.12 и Flutter 3.44. Давайте вместе разберемся, что в них нового.
Начнем, конечно же, с Dart. Тут добавился новый функционал - приватные именованные параметры. Теперь мы можем добавлять наши приватные переменные в конструктор.
Как это было в старых версиях:
Как это выглядит теперь:
А при использовании ничего не поменялось:
Еще из того, что добавилось:
🟡 В экспериментальной фазе находятся обновленные конструкторы для классов;
🟡 Добавилась нативная поддержка 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?
Начнем, конечно же, с 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’);
Еще из того, что добавилось:
Flutter 3.44 приносит нам 2 больших и важных изменения, для которых нужно будет проводить миграции, если этого еще не сделано:
Еще изменения в фреймворке:
Делитесь в комментариях, как вам обновление и смотрели ли Google I/O 2026?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤6🔥3🥱1
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
Hola, Amigos! Собрали в одну подборку все посты мая, которые вы могли пропустить. Выбирайте, что интересно, и переходите по ссылкам для полезного выходного чтива:
🟡 Прокачиваем локальный поиск на Dart и Flutter
🟡 Полезные сниппеты для жизненного цикла виджета
🟡 Полезные extensions для DateTime
🟡 Как понять, нужна ли библиотека и как ее выбрать?
🟡 Обзор плагина Flutter Intl для IDE
🟡 Краткий обзор Dart 3.12 и Flutter 3.44
🟡 Оптимизируем кастомные анимации
Всем хорошего кода!
P.S. Завтра ждем вас на квартирнике “Мифическая кроссплатформа” на CodeFest в Новосибирске!
Всем хорошего кода!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1