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

Новости Flutter-разработки, дайджесты мероприятий, личный опыт.
Download Telegram
Hola, Amigos! Мы вводим еще одну новую рубрику и раз в месяц мы будем делиться с вами плагинами для Android Studio и VS Code, которыми пользуемся сами.

Сегодня посмотрим на Bloc - плагин от разработчиков одноименной библиотеки. Он позволяет:

• Создавать классы Bloc, State и Event в пару кликов с уже добавленным под ваше название шаблонным кодом. Для Android Studio также доступно создание с использованием библиотек equatable и freezed;

• Оборачивать виджеты в BlocProvider, BlocListener, BlocBuilder, BlocConsumer и BlocSelector, как мы это делаем с оборачиванием в другие виджеты через плагин Flutter;

• Добавлять шаблонный код для bloc при помощи специализированных snippets.

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

P.S. Вы сможете находить посты этой рубрики через #плагины
👍84🔥4
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 нужен для максимальной кастомизации.

Рассказывайте в комментариях, какой из них чаще используете в своей работе?
👍62👎1🔥1
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня мы разберем один интересный кейс - как сделать так, чтобы какое-то действие в приложении совершалось тогда, когда мы трясем телефон.

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

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

P.S. А мы завязали один из триггеров открытия Amiga Dev Screen, который уже скоро вы сможете добавлять в свои проекты.
👍12🔥73
Дайджест марта-апреля

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

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

Всем хорошего кода!
Please open Telegram to view this post
VIEW IN TELEGRAM
103🔥2👏2
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga.

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

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

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

Делитесь в комментариях, сталкивались ли вы с похожими кейсами?
👍5🔥2👏2
Hola, Amigos! Наш Mobile Team Lead Павел Гершевич примет участие в активности под названием “Квартирник” на конференции CodeFest 16.

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

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

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

Ссылка на квартирник
🔥41👍1
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();
}


Пишите в комментариях, про какие сниппеты рассказать в следующий раз?
👍4🔥3👏2
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
👍8🤣2
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Для многих задач уже есть готовые библиотеки, но иногда нужно удостовериться, а действительно ли та или иная библиотека нужна в разрабатываемом приложении? Ловите наш чек-лист по выбору библиотек и проверке необходимости их применения.

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

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

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

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

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

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

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

Рассказывайте в комментариях, а как вы выбираете библиотеки для своих проектов?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥21