Flutter Pulse
725 subscribers
447 photos
1.04K links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Новые пакеты за неделю

video_view - новый пакет для легкого воспроизведения видео в приложениях Flutter!
Он поддерживает субтитры и переключение аудиодорожек, а также использует системные или приложенные компоненты для бесшовного воспроизведения.
👍 Лайки: 3, 📥 Скачиваний: 769
https://pub.dev/packages/video_view

ui_guard - новый пакет для Flutter!
Пакет ui_guard позволяет легко и декларативно контролировать доступ к определенным частям вашего приложения на основе ролей, разрешений и условий.
👍 Лайки: 7, 📥 Скачиваний: 144
https://pub.dev/packages/ui_guard

chucker_flutter - новый пакет для мониторинга и отладки сетевых запросов в приложениях Flutter!
Позволяет логировать все HTTP-запросы и ответы, просматривать детали запросов и ответов, а также получать уведомления о каждом запросе.
👍 Лайки: 1, 📥 Скачиваний: 295
https://pub.dev/packages/chucker_flutter

reaxdb_dart - быстрая NoSQL база данных для Flutter!
Храните миллионы записей с скоростью 21 000+ операций в секунду, мгновенным чтением из кэша и встроенным шифрованием.
👍 Лайки: 18, 📥 Скачиваний: 94
https://pub.dev/packages/reaxdb_dart

permission_config - плагин для Flutter CLI, который автоматически добавляет разрешения для Android и iOS в ваш проект и генерирует готовый файл для обработки разрешений во время выполнения.
👍 Лайки: 7, 📥 Скачиваний: 262
https://pub.dev/packages/permission_config

local_query_filter - пакет для фильтрации данных на стороне клиента с поддержкой поиска, сортировки и пагинации.
👍 Лайки: 6, 📥 Скачиваний: 86
https://pub.dev/packages/local_query_filter
#flutter #dart #pubdev #FlutterPulse #FlutterPulseBestNewPackages #video_view #ui_guard #chucker_flutter #reaxdb_dart #permission_config #local_query_filter
Рисуем и анимируем круглый прогресс-бар с помощью Custom Painter

В этом совете мы рассмотрим, как создать анимированный круглый прогресс-бар, используя виджет CustomPaint во Flutter. Такой прогресс-бар можно использовать, например, для индикации загрузки.

Основные моменты:

1️⃣ Передача анимации в конструктор CustomPainter автоматически вызывает перерисовку.

2️⃣ При обновлении прогресса мы изменяем начало и конец анимации, а затем запускаем её. Поскольку время загрузки предсказать невозможно, анимация прогресс-бара продолжается после обновления прогресса.

Пример кода:



class RoundProgressPainter extends CustomPainter {
final double radius;
final double progress;
final Color color;
final Animation<double> animation;
final double strokeWidth;

RoundProgressPainter({
required this.radius,
required this.progress,
required this.color,
required this.animation,
required this.strokeWidth,
}) : super(repaint: animation);

@override
void paint(Canvas canvas, Size size) {
final center = Offset(size.width / 2, size.height / 2);
final progressAngle = math.pi * 2 * progress;
final progressPaint = Paint()
..color = color
..strokeWidth = strokeWidth
..style = PaintingStyle.stroke
..strokeCap = StrokeCap.round;

canvas.drawCircle(
center,
radius - strokeWidth / 2,
Paint()
..color = color.withOpacity(0.1)
..strokeWidth = strokeWidth
..style = PaintingStyle.stroke,
);

canvas.drawArc(
Rect.fromCircle(center: center, radius: radius),
-math.pi / 2,
progressAngle,
false,
progressPaint,
);
}

@override
bool shouldRepaint(RoundProgressPainter oldDelegate) =>
progress != oldDelegate.progress || color != oldDelegate.color;
}





class RoundProgress extends StatefulWidget {
final double radius;
final double progress;
final Color color;
final Widget? child;
final double strokeWidth;

const RoundProgress({
super.key,
required this.radius,
required this.progress,
required this.color,
this.child,
this.strokeWidth = 4.0,
});

@override
_RoundProgressState createState() => _RoundProgressState();
}

class _RoundProgressState extends State<RoundProgress> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _animation;

@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 300),
);
_animation = Tween(begin: 0.0, end: 1.0).animate(
CurvedAnimation(parent: _controller, curve: Curves.decelerate),
);
_controller.forward(from: 0);
}

@override
void dispose() {
_controller.dispose();
super.dispose();
}

@override
void didUpdateWidget(covariant RoundProgress oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.progress != oldWidget.progress && widget.progress != null) {
_animation = Tween(begin: oldWidget.progress, end: widget.progress).animate(
CurvedAnimation(parent: _controller, curve: Curves.easeIn),
);
_controller.forward(from: 0);
}
}

@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _animation,
builder: (context, child) => CustomPaint(
size: Size(widget.radius * 2, widget.radius * 2),
painter: RoundProgressPainter(
radius: widget.radius,
progress: widget.progress,
color: widget.color,
animation: _animation,
strokeWidth: widget.strokeWidth,
),
child: widget.child,
),
);
}
}



Оцените новую рубрику и напишите в комментариях, что вы хотели бы увидеть в следующих постах! 👍💬

Все подобные новости можно найти по хэштегу #FlutterPulseTips

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #UI #Animation #CustomPainter #ProgressBar #LoadingAnimation #FlutterTips
👍2
Запуск анимации при изменении свойства
Привет, подписчики! 👋 Сегодня мы рассмотрим интересный вопрос: как запустить анимацию каждый раз, когда меняется определенное свойство? 🤔

Представьте, что у вас есть виджет, который должен анимироваться при изменении определенного свойства. Например, вы хотите запустить анимацию загрузки при изменении состояния загрузки. 📈

Для этого мы можем использовать метод didUpdateWidget в StatefulWidget. Этот метод вызывается каждый раз, когда виджет обновляется. 🔄

Пример кода:


@override
void didUpdateWidget(covariant UploadedAvatarAnimation oldWidget) {
super.didUpdateWidget(oldWidget);
final (wasUploading, isUploading) = (oldWidget.isUploading, widget.isUploading);
switch ((wasUploading, isUploading)) {
case (false, true):
_controller.forward(from: 0);
_initScaleAnim(0, pt);
case (true, false):
_controller.reverse(from: 1);
default:
}
}



В этом примере мы проверяем, изменилось ли свойство isUploading, и запускаем анимацию соответствующим образом. 🔮

Как это работает?
1. Мы используем метод didUpdateWidget, чтобы отслеживать изменения виджета.
2. Мы сравниваем старое и новое значения свойства isUploading.
3. В зависимости от изменения, мы запускаем анимацию вперед или назад.

Оцените новую рубрику и напишите в комментариях, что вы думаете! 💬

Все подобные новости можно найти по хэштегу #FlutterPulseTips 👍
#flutter #dart #flutterpulse #FlutterPulseTips #mobiledev #appdev #animation #ui #ux #codingtips #programming #softwaredevelopment
👍4
Обзор пакетов на тему Card & Expansion Tile 🚀

1. FLASH CARD – удобные карточки для запоминания
Пакет flash_card (v0.1.0) помогает создавать интерактивные карточки для обучения. Простое добавление карточек с лицевой и обратной стороной.
👍 28 | 📥 155 | 🔄 11 месяцев назад
🔗 https://pub.dev/packages/flash_card

2. card_stack_widget 0.1.6
Вертикальный стек карточек с возможностью свайпа и кастомизацией. Настройте ориентацию, прозрачность, масштаб и анимацию.
👍 79 | 📥 321 | 🔄 10 месяцев назад
🔗 https://pub.dev/packages/card_stack_widget

3. vertical_card_pager 1.6.3
Создавайте динамичные вертикальные пейджеры с карточками. Идеально для визуально привлекательных интерфейсов!
👍 298 | 📥 529 | 🔄 8 месяцев назад
🔗 https://pub.dev/packages/vertical_card_pager

4. expansion_tile_group 2.3.0
Расширяет стандартный ExpansionTile, добавляя группировку, кастомизацию стилей и управление раскрытием.
👍 90 | 📥 5.8K | 🔄 4 месяца назад
🔗 https://pub.dev/packages/expansion_tile_group

5. expansion_tile_list 2.0.0
Мощный пакет для кастомизируемых списков с раскрывающимися элементами. Поддержка аккордеона, перетаскивания и анимаций.
👍 32 | 📥 1.7K | 🔄 5 месяцев назад
🔗 https://pub.dev/packages/expansion_tile_list

#Flutter #Dart #PubDev #FlutterPulse #CardWidgets #ExpansionTile #UI
Flutter — Shimmer: Улучшаем пользовательский опыт во время загрузки данных
🚀 Хотите сделать своё Flutter-приложение более привлекательным и удобным для пользователей во время загрузки данных? 🤔

В этой статье вы узнаете о том, как использовать эффект Shimmer в Flutter, чтобы улучшить пользовательский интерфейс во время загрузки данных. Shimmer — это анимация, которая отображается до тех пор, пока данные не будут загружены, и является отличным способом сделать приложение более дружественным к пользователям. 📱

В статье подробно описано, как реализовать Shimmer в Flutter, включая установку пакета Shimmer, создание виджета Shimmer и его использование в приложении. Вы также узнаете, как использовать Shimmer для списков, карточек и изображений. 🌟

Кроме того, в статье приведен пример простого Flutter-приложения, которое загружает "факты о кошках" и использует Shimmer во время загрузки данных. 📚

Перейдите по ссылкам, чтобы узнать больше о Shimmer в Flutter:
🇷🇺Flutter — Shimmer (на русском)
🇬🇧Flutter — Shimmer (на английском)
🌐Оригинальная статья

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика! 👍

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #userexperience #ui #ux #shimmer #loadinganimation
🔥1
Оптимизация интерфейса Flutter с помощью RepaintBoundary
🚀 Хотите, чтобы ваше приложение на Flutter работало плавно и быстро? 🤔 Тогда вам нужно знать о виджете RepaintBoundary!

Основная часть: в статье рассматривается виджет RepaintBoundary, который помогает изолировать части интерфейса от ненужных перерисовок, улучшая производительность и эффективность приложения. Вы узнаете, как и когда использовать RepaintBoundary, чтобы оптимизировать сложные UI-компоненты, предотвратить "дерганый" интерфейс и повысить скорость отрисовки анимаций. 📈 Также в статье приведены примеры использования RepaintBoundary с AnimatedBuilder и Image.network, а также советы по измерению производительности с помощью Flutter DevTools и debugRepaintRainbowEnabled. 🔍

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Original article

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика! 👍
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appoptimization #ui #ux #performanceoptimization
Создаём динамический алфавитный слайдер для Android-ланчера с помощью Flutter

🚀 Хотите создать стильный и функциональный алфавитный слайдер для вашего Android-ланчера? В этой статье мы разберёмся, как сделать это с помощью Flutter!

В статье описано создание динамического алфавитного слайдера с красивыми анимациями и адаптивным поведением. Вы узнаете, как реализовать:
- вертикальный индекс букв, реагирующий на касания пользователя
- визуальную обратную связь при перетаскивании (с круговым индикатором буквы)
- динамическое позиционирование, следующее за пальцем пользователя
- адаптивную анимацию "колокола" для соседних букв
- поддержку выравнивания как слева, так и справа
- чистый и настраиваемый дизайн

Читая эту статью, вы научитесь создавать полезный компонент для вашего ланчера и узнаете много нового о Flutter.

🇷🇺 Читать на русском
🇬🇧 Читать на английском
🌐 Оригинальная статья

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика!

#flutter #dart #flutterpulse #FlutterPulseMedium #android #launcher #ui #ux #animation #mobiledev
👍1
Избегаем Future.delayed в Flutter: лучшие альтернативы для управления временем в интерфейсе
🚀 Хотите улучшить свои навыки разработки на Flutter и создавать более стабильные приложения? 🤔 Тогда вам стоит узнать о лучших альтернативах использованию Future.delayed для управления временем в интерфейсе!

В этой статье рассматриваются проблемы, связанные с использованием Future.delayed, и предлагаются четыре альтернативных подхода для управления временем в интерфейсе Flutter-приложений. Вы узнаете, как использовать KeyboardVisibilityController, MediaQuery, AnimationController и вложенные вызовы WidgetsBinding.instance.addPostFrameCallback, чтобы сделать свои приложения более надежными и адаптивными к различным устройствам и взаимодействиям с пользователем. 📱💻

Эти подходы позволяют реагировать на фактические события интерфейса, а не на произвольные задержки, что делает код более тестируемым и поддерживаемым. Узнайте, как улучшить свои приложения, перейдя по ссылкам ниже! 🔍

🇷🇺 Читать на русском
🇬🇧 Читать на английском
🌐 Оригинал статьи

Все подобные новости ищите по хэштегу #FlutterPulseMedium Оцените новую рубрику! 👍

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #ui #ux #programming #coding #softwaredevelopment
👍2
Создание крутых интерфейсов с Flow Widget
🚀 Хотите создать анимированные и динамические интерфейсы в своих Flutter-приложениях? 🤔 В статье ниже вы найдёте подробное руководство по использованию Flow Widget! 📚

Основная часть статьи посвящена описанию приёмов и фишек Flow Widget, который позволяет создавать кастомные, анимированные макеты. Вы узнаете, как использовать FlowDelegate для управления расположением дочерних виджетов, как применять матрицы трансформации для динамического позиционирования и как оптимизировать производительность с помощью анимаций. 📈

В статье приведены практические примеры, включая создание анимированного Floating Action Button (FAB) меню с нуля, без использования сторонних пакетов. Вы увидите, как использовать AnimationController и Flow Widget для создания плавных и эффективных анимаций. 🌟

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Original article

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам новая рубрика! 👍

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #ui #ux #animation #FlowWidget
🚀 Flutter 3.38: Новый уровень продуктивности для разработчиков!

Flutter 3.38 уже здесь, и он заставляет писать меньше, а создавать больше! 🔥 Обновление полно крутых фишек, улучшений UI и инструментов для веба, iOS, Android и десктопа.

Главные фишки нового релиза

1️⃣ Сокращения точек в Dart
Пишите лаконично: .start вместо MainAxisAlignment.start и .all(8.0) вместо EdgeInsets.all(8.0)
Поддержка именованных конструкторов и улучшенная читаемость кода

2️⃣ Веб-разработка на новом уровне
Конфигурационные файлы web_dev_config.yaml для хоста, порта и заголовков
Настройки прокси прямо в проекте
Улучшенная горячая перезагрузка, даже с несколькими браузерами

3️⃣ Фреймворк и UI
OverlayPortal для гибкого отображения всплывающих виджетов
Предиктивные переходы назад на Android
Расширенная интеграция с десктопом: информация о мониторах и окнах на Windows
Исправления жизненного цикла виджетов и стабильность ResizeImage

4️⃣ Material & Cupertino
Унификация API через WidgetState
Новые возможности Badge.count(maxCount), InkWell.onLongPressUp
Улучшения iOS-виджетов: CupertinoSlidingSegmentedControl, CupertinoSheet
Полировка компонентов: DropdownMenuFormField, SegmentedButton

5️⃣ Прокрутка и Sliver
Надёжная обработка жестов и точная навигация по фокусу
Новый конструктор SliverGrid.list
Улучшения для сложных макетов и вложенных слайверов

6️⃣ Доступность
SliverSemantics для аннотаций слайверов
AutoComplete сообщает статус поиска
Увеличенные целевые области касания в TimePicker

7️⃣ iOS и Android
Поддержка iOS 26, Xcode 26, macOS 26
Миграция на жизненный цикл UIScene
Совместимость с размером страницы 16 КБ на Android
Исправления утечек памяти и обновление NDK

8️⃣ Двигатель и DevTools
Унификация рендереров CanvasKit и Skwasm
Vulkan/OpenGL ES: стабильность и производительность
Расширенные предварительные просмотры виджетов в IDE (MultiPreview, группы, кастомные аннотации)
Исправления панели сети и Flutter Inspector

9️⃣ Устаревания и важные изменения

Новый flutter.version.json вместо version
Устаревшие свойства CupertinoDynamicColor
Java 17 обязательна для Android

🌟 Flutter 3.38 — это меньше шаблонного кода, больше контроля над UI и продуктивность на всех платформах.

📌 Полезные ссылки:
Полный перевод статьи от нашего канала
Оригинал статьи


#flutter #dart #flutterpulse #FlutterPulsenews #mobiledev #crossplatform #flutterdev #dartlang #UI #DevTools #iOS #Android #webdev
🔥5