Flutter Pulse
417 subscribers
270 photos
541 links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
🔥 ТОП самых просматриваемых видео по Flutter за неделю! 🔥
Собрали для вас самые полезные, просматриваемые и обсуждаемые видео последних дней. Обучение, код-ревью, конференции и даже магия AI в UI — всё в одном месте! 🎯

1. 🕒📊 Dart Code Metrics | Observable Flutter #63
📊 Узнайте, как Dart Code Metrics может помочь вашей команде писать более чистый код.
1 час 50 мин | 📲 5,101 просмотров
▶️ https://www.youtube.com/watch?v=ftPD7jTTsjg

2. 🕒📱 Const vs Final в Dart и Flutter
📊 В этом видео мы обсудим ключевые слова const и final, их использование и разницу между ними.
7 мин | 📲 4,425 просмотров
▶️ https://www.youtube.com/watch?v=ySVpiyc6vqo

3. 🕒📱 Код-ревью успешного Flutter-приложения с 100к+ загрузок... И вот что я нашел! 😱
📊 Разбор приложения Cashew на GitHub. Интересные находки, архитектура и полезные фишки.
30 мин | 📲 1,979 просмотров
▶️ https://www.youtube.com/watch?v=KNsYFMmHfkg

4. 🕒📱 Клонирование UI Airbnb за СЕКУНДЫ с помощью AI | Flutter Tutorial
📊 Используем Prompt2Flutter — генератор UI через ИИ. Быстро и эффективно!
5 мин | 📲 1,832 просмотров
▶️ https://www.youtube.com/watch?v=mxcZcLW71y4

5. 🕒📱 Flutter для начинающих • Tutorial
📊 Разработка приложений в стиле TikTok, Noon, YouTube — идеальный старт!
1 час 14 мин | 📲 1,109 просмотров
▶️ https://www.youtube.com/watch?v=K05a4S7n-G8

6. 🕒📱 Flutter Global Summit 25 - Flutter Day
📊 Всё самое важное с крупнейшего события для Flutter-разработчиков!
5 часов 50 мин | 📲 646 просмотров
▶️ https://www.youtube.com/watch?v=L2uJ5iXm4O8

7. 🕒📱 Создание адаптивного дашборда Flutter с помощью AI за секунды | Prompt2Flutter
📊 Пример, как быстро собрать адаптивный дашборд с помощью генерации интерфейса.
5 мин | 📲 385 просмотров
▶️ https://www.youtube.com/watch?v=Q_9IjbkqwKo

8. 🕒📱 Humpday Q&A/AMA и живое кодирование!
📊 Общение с командой Flutter, обсуждение Dart и сессия живого кодинга.
3 часа 2 мин | 📲 378 просмотров
▶️ https://www.youtube.com/watch?v=DfMHiEs5j2o

9. 🕒📱 Получение данных из подколлекций Firebase Firestore в Flutter
📊 Как правильно извлекать и структурировать данные в вашем Firestore-проекте.
9 мин | 📲 296 просмотров
▶️ https://www.youtube.com/watch?v=uf-IEqWXcfw

🧠 Смотрите самые интересные и полезные видео по Flutter, Dart и мобильной разработке!
📲 Подписывайтесь, чтобы не пропустить свежие подборки и гайды!

#Flutter #Dart #PubDev #FlutterPulse #FlutterPulseYouTube #МобильнаяРазработка #Программирование #РазработкаПриложений
Адаптивный конструктор одного виджета с помощью DeviceSizeBuilder

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

@override
Widget build(BuildContext context) {
return DeviceSizeBuilder(
builder: (device) => Column(
children: [
switch (device) {
DeviceType.small => const Spacer(),
// игнорируем остальные случаи
},
ElevatedButton(
onTap: () {},
child: Text('tap me'),
),
],
),
);
}

Чтобы иметь доступ к методу didChangeMetrics, нам нужно использовать WidgetsBinding:

class DeviceSizeBuilder extends StatefulWidget {
const DeviceSizeBuilder({
super.key,
required this.builder,
});

@override
State<DeviceSizeBuilder> createState() => _DeviceSizeBuilderState();
}

class _DeviceSizeBuilderState extends State<DeviceSizeBuilder> with WidgetsBindingObserver {
late DeviceType _lastSize;

@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
_lastSize = widget.builder;
}

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

@override
void didChangeMetrics() {
super.didChangeMetrics();
final newSize = DeviceType.fromWidth(viewportWidth);
if (_lastSize != newSize) {
setState(() {});
}
}

double get viewportWidth => MediaQuery.of(context).size.width;

@override
Widget build(BuildContext context) {
_lastSize = DeviceType.fromWidth(viewportWidth);
return widget.builder(_lastSize);
}
}

Мы хотим перестроить дочерний элемент только при изменении типа устройства.
Наши точки останова:

enum DeviceType {
small(0),
medium(600),
large(1024),
Xlarge(2200);

final double breakpoint;

const DeviceType(this.breakpoint);

static DeviceType fromWidth(double width) {
return switch (width) {
< 600 => DeviceType.small,
< 1024 => DeviceType.medium,
< 2200 => DeviceType.large,
_ => DeviceType.Xlarge,
};
}
}


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

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

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #ResponsiveDesign #UI #UX #Widgets #CodingTips
Обзор пакетов на тему "Выбор цвета и утилиты"

Material Color Utilities 🎨
Этот пакет используется для работы с цветами в Material Design 3, включая выбор темы из изображений и создание тонов цветов.
👍 Лайки: 240, 📥 Скачиваний: 5.36М
Последнее обновление 📅: 6 дней назад
https://pub.dev/packages/material_color_utilities

Palette Generator 🖌️
Пакет для Flutter - инструмент для извлечения основных цветов из изображений. Часто используется для создания цветовых схем интерфейса пользователя.
👍 Лайки: 672, 📥 Скачиваний: 7.59К
Последнее обновление 📅: 35 дней назад
https://pub.dev/packages/palette_generator

FlexSeedScheme 🌱
Этот пакет позволяет создавать более гибкие и мощные цветовые схемы для Flutter-приложений.
👍 Лайки: 87, 📥 Скачиваний: 300К
Последнее обновление 📅: 2 месяца назад
https://pub.dev/packages/flex_seed_scheme

AnsiColor 🖥️
Добавьте цвета в свои терминальные программы с помощью AnsiPen. Легко отключить для продакшена.
👍 Лайки: 158, 📥 Скачиваний: 1.35М
Последнее обновление 📅: 10 месяцев назад
https://pub.dev/packages/ansicolor

FlexColorPicker 🎨
Этот пакет позволяет создавать настраиваемые цветовые палитры для ваших приложений. Включает 6 разных типов цветовых палитр, поддержку Material Design 2 и 3, а также возможность копирования и вставки цветов.
👍 Лайки: 554, 📥 Скачиваний: 241К
Последнее обновление 📅: 42 дня назад
https://pub.dev/packages/flex_color_picker

flutter_colorpicker 🎨
Этот пакет позволяет вам создавать удобные и настраиваемые селекторы цвета для ваших приложений. Поддерживает форматы HSV, HSL, RGB и Material.
👍 Лайки: 977, 📥 Скачиваний: 270К
Последнее обновление 📅: 12 месяцев назад
https://pub.dev/packages/flutter_colorpicker

#flutter #dart #pubdev #flutterpulse #flutterpulsethemedpackages #MaterialColorUtilities #PaletteGenerator #FlexSeedScheme #AnsiColor #FlexColorPicker #flutter_colorpicker
Внимание всем разработчикам на Flutter! 🚀💻
Анна из Friflex Flutter Team Lead 👋 сегодня решила поговорить о режимах сборки в Flutter 🤔.
Вы знали, что существуют три основных режима: debug, profile и release? 🤷‍♀️
Давайте разберемся, чем они отличаются и когда их лучше использовать 📊.

◾️ Debug-режим - это режим отладки 🐜, где вы можете легко отслеживать значения переменных, останавливать выполнение по breakpoints и использовать hot reload 🔥.
Кроме этого, в debug-режиме вы можете подключать дополнительные инструменты, такие как DevTools и Flutter inspector 🛠️.

◾️ Profile-режим - это что-то среднее между debug- и release-режимами 🤝, где вы можете исследовать производительность приложения и оптимизировать код 📈.
Но помните, что profile-режим не поддерживается эмуляторами и симуляторами 📴, поэтому его стоит запускать на физических устройствах 📊.

◾️ Release-режим - это режим выпуска 🚀, где сборка максимально оптимизирована и не поддерживает дополнительные инструменты 🚫.

Хотите узнать больше о режимах сборки в Flutter? 🤔
Читайте полную статью по ссылке: https://t.me/flutterfriendly/164 📎

И не забудьте подписаться на наш канал flutterpulse, чтобы быть в курсе всех последних новостей и обновлений в мире Flutter! 📱
#flutter #dart #flutterpulse 💻👍
Лучшие обновленные пакеты за последние 24 часа!

Graphic (2.6.0)
Эта библиотека используется для создания гибких и интерактивных графиков и диаграмм в приложениях Flutter. В новой версии добавлены ступенчатые формы для линейных и областных графиков, улучшена стабильность и обновлены зависимости.
👍 Лайки: 813, 📥 Скачиваний: 57.1К
https://pub.dev/packages/graphic

gRPC (4.1.0)
Пакет gRPC - это высокопроизводительный, открытый фреймворк для создания RPC-сервисов. В новой версии добавлена поддержка серверных перехватчиков (serverInterceptors) в ConnectionServer.
👍 Лайки: 432, 📥 Скачиваний: 323К
https://pub.dev/packages/grpc

purchases_flutter (8.10.2)
Пакет purchases_flutter - это клиент для системы отслеживания подписок и покупок RevenueCat. В новой версии обновлены зависимости.
👍 Лайки: 806, 📥 Скачиваний: 149К
https://pub.dev/packages/purchases_flutter

google_maps_flutter_ios (2.15.3)
Пакет google_maps_flutter_ios - это реализация Google Maps для iOS в Flutter. В новой версии исправлены новые предупреждения анализа и обновлена минимальная поддерживаемая версия SDK.
👍 Лайки: 9, 📥 Скачиваний: 739К
https://pub.dev/packages/google_maps_flutter_ios

watcher (1.1.2)
Пакет watcher используется для мониторинга изменений в директориях и отправки уведомлений. В новой версии исправлена ошибка на Windows.
👍 Лайки: 216, 📥 Скачиваний: 7.2М
https://pub.dev/packages/watcher

supabase_flutter (0.0.1-dev.1)
Этот пакет позволяет легко интегрировать Supabase в ваши Flutter-приложения. Обновление включает в себя первоначальный выпуск пакета.
👍 Лайки: 821, 📥 Скачиваний: 170К
https://pub.dev/packages/supabase_flutter

#Flutter #Dart #pubdev #FlutterPulse #FlutterPulseBestPackages #Graphic #gRPC #purchases_flutter #google_maps_flutter_ios #watcher #supabase_flutter
Выход за рамки Material: добавление пользовательских цветов в тему Flutter

Хотите выйти за пределы стандартных ограничений Material Design в вашем приложении Flutter? 🤔 В этой статье мы расскажем, как создать расширение темы для добавления пользовательских цветов! 🎨

Шаг 1: Создание ThemeExtension
Для начала создайте класс, который будет предоставлять ваши цвета. Этот класс должен расширять ThemeExtension. Пример реализации:


import 'package:flutter/material.dart';

class AppareanceKitColors extends ThemeExtension<AppareanceKitColors> {
final Color primary;
final Color secondary;
final Color dark;
final Color onePrimary;
final Color background;
final Color onbackground;
final Color surface;
final Color onSurface;
final Color grey1;
final Color grey2;
final Color grey3;
final Color error;

const AppareanceKitColors({
required this.primary,
required this.secondary,
required this.dark,
required this.onePrimary,
required this.background,
required this.onbackground,
required this.surface,
required this.onSurface,
required this.grey1,
required this.grey2,
required this.grey3,
required this.error,
});

factory AppareanceKitColors.light() => const AppareanceKitColors(
primary: Color(0xFFF830FF),
secondary: Color(0xFF3057AD),
dark: Color(0xFF20001D),
onePrimary: Color(0xFF110551),
background: Color(0xFFFFFFFF),
onbackground: Color(0xFF110551),
surface: Color(0xFFAEAEAE),
onSurface: Color(0xFF000000),
grey1: Color(0xFFF9E5FF),
grey2: Color(0xFFFFD8FF),
grey3: Color(0xFF632338),
error: Color(0xFFC41E1E),
);
}



Шаг 2: Добавление расширения в тему Material
Теперь добавьте созданное расширение в вашу тему Material, используя свойство extensions:


MaterialApp(
theme: ThemeData(
extensions: [
AppareanceKitColors.light(),
],
),
)



Шаг 3: Использование цветов из расширения
Чтобы получить доступ к вашим цветам в любом месте приложения, используйте следующий код:


extension AppareanceKitThemeExt on BuildContext {
AppareanceKitColors get colors => Theme.of(this).extension<AppareanceKitColors>()!;
}

// Использование
Container(
color: context.colors.primary,
)



Оцените новую рубрику Flutter Pulse Tips и оставьте свои отзывы! 👍💬

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

#flutter #dart #flutterpulse #FlutterPulseTips #mobiledevelopment #appdevelopment #uiux #codingtips #FlutterTips #ThemeExtension #CustomColors
Обзор пакетов на тему "Здоровье и Фитнес" 🏋️‍♀️💪

health_kit_reporter 📊
Позволяет читать, писать и отслеживать данные из HealthKit на iOS. Поддерживает все методы из оригинальной библиотеки HealthKitReporter.
👍 Лайки: 57, 📥 Скачиваний: 2.6К
Последнее обновление 📅: 6 месяцев назад
https://pub.dev/packages/health_kit_reporter

Health 🏥
Позволяет читать и записывать данные о здоровье из Apple Health и Google Health Connect. Поддерживает работу с разрешениями, чтение и запись данных о здоровье, тренировках, приеме пищи и многом другом.
👍 Лайки: 604, 📥 Скачиваний: 32.8К
Последнее обновление 📅: 8 дней назад
https://pub.dev/packages/health

Huawei Health Kit Flutter Plugin 📈
Позволяет разработчикам создавать приложения, которые могут доступиться к данным о здоровье и фитнесе пользователей на основе их HUAWEI ID и авторизации.
👍 Лайки: 21, 📥 Скачиваний: 12
Последнее обновление 📅: 5 месяцев назад
https://pub.dev/packages/huawei_health

Polar ❄️
Обёртка для официального Polar SDK, позволяющая легко интегрировать поддержку устройств Polar в ваши приложения на Flutter.
👍 Лайки: 21, 📥 Скачиваний: 1.0К
Последнее обновление 📅: 22 дня назад
https://pub.dev/packages/polar

Pedometer 🚶‍♀️
Плагин позволяет непрерывно считать шаги и определять статус пешехода (ходьба или остановка) с помощью встроенного датчика пedometer в устройствах iOS и Android.
👍 Лайки: 323, 📥 Скачиваний: 11К
Последнее обновление 📅: 2 месяца назад
https://pub.dev/packages/pedometer

Body Part Selector 🤸‍♀️
Легкий и красивый селектор частей тела для ваших приложений.
👍 Лайки: 36, 📥 Скачиваний: 382
Последнее обновление 📅: 12 месяцев назад
https://pub.dev/packages/body_part_selector

#health_kit_reporter #Health #HuaweiHealthKitFlutterPlugin #Polar #Pedometer #BodyPartSelector #flutter #dart #pubdev #flutterpulse #flutterpulsethemedpackages
Лучшие обновленные пакеты за последние 24 часа!

win32 3.1.4
Пакет win32 предоставляет доступ к Win32 API из Dart. В новой версии исправлена ошибка экспорта crypt32 API.
👍 Лайки: 880, 📥 Скачиваний: 5.4М
https://pub.dev/packages/win32

Flutter Modular 6.4.1
Пакет Flutter Modular предназначен для реализации модульной структуры в ваших проектах на Flutter. В новой версии исправлена ошибка с Dispose в AppModule.
👍 Лайки: 1300, 📥 Скачиваний: 107К
https://pub.dev/packages/flutter_modular

go_router 15.2.0
Пакет go_router используется для декларативного маршрутизации в Flutter. В новой версии добавлены новые методы для типобезопасной маршрутизации.
👍 Лайки: 5320, 📥 Скачиваний: 1.73М
https://pub.dev/packages/go_router

signature 6.1.0
Пакет signature предоставляет высокопроизводительный холст для создания подписей. В новой версии обновлены зависимости и Flutter до версии 3.32.
👍 Лайки: 606, 📥 Скачиваний: 155К
https://pub.dev/packages/signature

file_picker 10.2.0
Пакет file_picker позволяет использовать системный файловый менеджер для выбора файлов. В новой версии добавлена поддержка изображений в формате webp на десктоп-платформах.
👍 Лайки: 4720, 📥 Скачиваний: 1.88М
https://pub.dev/packages/file_picker

shadcn_ui 0.27.2
Пакет shadcn_ui - это набор компонентов пользовательского интерфейса для Flutter. В новой версии исправлены ошибки в компонентах ShadAccordion и ShadContextMenuItem.
👍 Лайки: 608, 📥 Скачиваний: 12.6К
https://pub.dev/packages/shadcn_ui

#win32 #FlutterModular #gorouter #signature #filepicker #shadcnuI #flutter #dart #pubdev #FlutterPulse #FlutterPulseBestPackages
Шаблон Riverpod: упрощаем работу с состоянием приложения

Привет, разработчики Flutter! 👋 Сегодня мы рассмотрим полезный совет по использованию Riverpod - популярной библиотеки для управления состоянием приложения. 📈

Проблема: при использовании Riverpod часто приходится писать повторяющийся код, например, ref.read(myProvider).xxx. Это может быть утомительно и привести к ошибкам. 😩

Решение: использование расширений Dart для создания удобных шорткатов. 🔥



extension UserSessionRepositoryProvider on Ref {
UserSessionRepository get userSessionRepository =>
read(userSessionRepositoryProvider);

UserSessionRepository get userSessionRepository$ =>
watch(userSessionRepositoryProvider);
}



Эти расширения позволяют легко получать экземпляр UserSessionRepository, используя ref.userSessionRepository или следить за его изменениями с помощью ref.userSessionRepository$. 🔄

Пример использования:



Future<UserSession> startSession({
required Session session,
}) async {
final activeSession = await ref.userSessionRepository
.getActiveSession(idOrThrow);
if (activeSession != null) {
throw AlreadyRunningSessionException();
}
return ref.userSessionRepository.start(
idOrThrow,
UserSession.fromSession(session),
);
}



Такой подход делает код чище и читабельнее. 📚

Оцените новую рубрику и напишите в комментариях, насколько она вам полезна! 🤔

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

#flutter #dart #flutterpulse #FlutterPulseTips #Riverpod #StateManagement #FlutterTips #MobileDevelopment #CodingTips
Обзор пакетов для печати на Flutter 🖨️

flutter_esc_pos_utils - утилиты для работы с принтерами ESC/POS.
Позволяет подключаться к принтерам по Wi-Fi/Ethernet, печатать текст, таблицы, изображения, штрих-коды и QR-коды.
👍 Лайки: 144, 📥 Скачиваний: 8.3К
Последнее обновление 📅: 13 месяцев назад
https://pub.dev/packages/flutter_esc_pos_utils

flutter_thermal_printer - пакет для работы с термальными принтерами на Android, iOS, macOS и Windows.
Поддерживает подключение по Bluetooth, USB, BLE и WiFi.
👍 Лайки: 74, 📥 Скачиваний: 1.8К
Последнее обновление 📅: 35 дней назад
https://pub.dev/packages/flutter_thermal_printer

printing - пакет для создания и печати документов в формате PDF на устройствах Android и iOS.
Использует пакет pdf для создания PDF-документов.
👍 Лайки: 1.7К, 📥 Скачиваний: 317К
Последнее обновление 📅: 4 месяца назад
https://pub.dev/packages/printing

flutter_bluetooth_printer - пакет для печати чеков на термопринтерах по Bluetooth в приложениях Flutter.
Позволяет создавать свои собственные чеки, печатать изображения и PDF-файлы, а также отправлять произвольные ESC/POS-команды.
👍 Лайки: 85, 📥 Скачиваний: 2.4К
Последнее обновление 📅: 18 дней назад
https://pub.dev/packages/flutter_bluetooth_printer

print_bluetooth_thermal - пакет для печати на термальных принтерах по Bluetooth.
Позволяет печатать билеты на термальных принтерах размером 58мм или 80мм на устройствах Android и iOS.
👍 Лайки: 124, 📥 Скачиваний: 7.9К
Последнее обновление 📅: 3 месяца назад
https://pub.dev/packages/print_bluetooth_thermal

sunmi_printer_plus - пакет для работы с принтерами Sunmi на Android-устройствах.
Позволяет печатать текст, штрих-коды, QR-коды, изображения и многое другое.
👍 Лайки: 137, 📥 Скачиваний: 7.5К
Последнее обновление 📅: 6 месяцев назад
https://pub.dev/packages/sunmi_printer_plus

#flutter #dart #pubdev #flutterpulse #flutterpulsethemedpackages #print_bluetooth_thermal #sunmi_printer_plus #flutter_thermal_printer #flutter_esc_pos_utils #flutter_bluetooth_printer #printing
Лучшие обновленные пакеты за последние 24 часа! 🚀

reactive_forms 18.0.1
Пакет для создания реактивных форм в Flutter. В новой версии исправлены проблемы с реактивностью в PopScope и добавлены новые методы для сброса контроля.
👍 Лайки: 903, 📥 Скачиваний: 76.9К
https://pub.dev/packages/reactive_forms

CamerAwesome 2.5.0
Пакет для интеграции камеры в Flutter-приложения. В новой версии исправлены ошибки с масштабом камеры на iOS и неточным предпросмотром.
👍 Лайки: 1.06К, 📥 Скачиваний: 29.3К
https://pub.dev/packages/camerawesome

pdfx 2.9.2
Пакет для отображения и работы с PDF-документами в Flutter. В новой версии исправлена ошибка PdfViewPinch при компиляции в WASM.
👍 Лайки: 481, 📥 Скачиваний: 229К
https://pub.dev/packages/pdfx

talker_logger 4.8.4
Пакет для логирования в приложениях. В новой версии добавлены аргументы семейства к логам в talker_riverpod_logger.
👍 Лайки: 49, 📥 Скачиваний: 252К
https://pub.dev/packages/talker_logger

Very Good CLI 0.26.0
Инструмент командной строки для Dart. В новой версии обновлены зависимости и лицензии, улучшена поддержка Flutter 3.32.0.
👍 Лайки: 672, 📥 Скачиваний: 71.9К
https://pub.dev/packages/very_good_cli

Talker 4.8.4
Пакет для обработки ошибок и логирования в приложениях на Dart и Flutter. В новой версии добавлены аргументы семейства в логи для Riverpod.
👍 Лайки: 724, 📥 Скачиваний: 248К
https://pub.dev/packages/talker

#reactive_forms #CamerAwesome #pdfx #talker_logger #VeryGoodCLI #Talker #flutter #dart #pubdev #FlutterPulse #FlutterPulseBestPackages
Flutter совет: шаблон RevenueCat

Вот несколько методов расширения, чтобы упростить работу с пакетом RevenueCat:

Получение периода подписки продукта в виде Duration



@override
Duration get duration => switch (revenueCatPackage.storeProduct.subscriptionPeriod) {
'P1W' => const Duration(days: 7),
'P1M' => const Duration(days: 30),
'P3M' => const Duration(days: 90),
'P6M' => const Duration(days: 180),
'P1Y' => const Duration(days: 365),
_ => Duration.zero,
};



Получение количества пробных дней для продукта



@override
int? get trialDays {
final introductory = revenueCatPackage.storeProduct.introductoryPrice;
if (introductory == null) {
return null;
}
if (introductory.price == 0) {
final unit = introductory.periodUnit;
switch (unit) {
case PeriodUnit.day:
return introductory.periodNumberOfUnits;
case PeriodUnit.week:
return introductory.periodNumberOfUnits * 7;
case PeriodUnit.month:
return introductory.periodNumberOfUnits * 30;
case PeriodUnit.year:
return introductory.periodNumberOfUnits * 365;
default:
return null;
}
}
return null;
}



Получение списка характеристик из метаданных RevenueCat в зависимости от языка пользователя



@override
List<String>? get features {
final locale = LocaleSettings.currentLocale.languageCode;
if (revenueCatOffer.metadata[locale] == null) {
return null;
}

final data = revenueCatOffer.metadata[locale]! as Map<Object?, Object?>;
final featurerObj = data["features"]! as List<Object?>;
return featurerObj.map((e) => e! as String).toList();
}



Оцените новую рубрику и напишите своё мнение! 👍💬

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

#flutter #dart #flutterpulse #FlutterPulseTips #RevenueCat #boilerplate #mobiledevelopment #appdevelopment #codingtips
Обзор пакетов на тему Кнопки и Кнопки прогресса

Animated Button 🎉
Создайте анимированные кнопки в вашем приложении с помощью этого простого и настраиваемого пакета. Возможности включают настройку высоты, ширины, цвета и тени.
👍 Лайки: 159, 📥 Скачиваний: 773
Последнее обновление 📅: 3 месяца назад
https://pub.dev/packages/animated_button

Flutter Animated Button 💫
Пакет для создания анимированных кнопок в Flutter. Поддерживает различные типы анимаций и настраиваемые стили.
👍 Лайки: 289, 📥 Скачиваний: 2.3К
Последнее обновление 📅: 6 месяцев назад
https://pub.dev/packages/flutter_animated_button

Flutter Swipe Button
Этот пакет позволяет создавать кнопки, которые активируются свайпом, предотвращая случайные клики.
👍 Лайки: 62, 📥 Скачиваний: 9.3К
Последнее обновление 📅: 12 месяцев назад
https://pub.dev/packages/flutter_swipe_button

Timer Button
Пакет Timer Button позволяет создать кнопку, которая становится активной после задержки времени. Поддерживает различные типы кнопок и настраивается.
👍 Лайки: 83, 📥 Скачиваний: 884
Последнее обновление 📅: 18 дней назад
https://pub.dev/packages/timer_button

GradientElevatedButton 🌟
Создавайте кнопки с градиентными фоновыми изображениями и настраивайте стиль по своему вкусу.
👍 Лайки: 15, 📥 Скачиваний: 830
Последнее обновление 📅: 3 месяца назад
https://pub.dev/packages/gradient_elevated_button

Pretty Animated Buttons
Включает 12 красивых анимированных кнопок, которые можно легко настроить.
👍 Лайки: 80, 📥 Скачиваний: 1.1К
Последнее обновление 📅: 10 месяцев назад
https://pub.dev/packages/pretty_animated_buttons

#flutter #dart #pubdev #flutterpulse #flutterpulsethemedpackages #animatedbutton #flutteranimatedbutton #flutterswipebutton #timerbutton #gradiantelevatedbutton #prettyanimatedbuttons
🎯 Flutter совет: Шаблон подписки с Provider

Управление подпиской через Provider — один из самых чистых и масштабируемых способов построения архитектуры подписок в Flutter. Ниже — полный шаблон, который можно адаптировать под RevenueCat, Qonversion, Firebase и другие платформы.

---

🔧 Модель состояния подписки

class SubscriptionModel extends ChangeNotifier {
  bool _isSubscribed = false;
  DateTime? _expiryDate;

  bool get isSubscribed => _isSubscribed;
  DateTime? get expiryDate => _expiryDate;

  void updateStatus({required bool subscribed, DateTime? expiry}) {
    _isSubscribed = subscribed;
    _expiryDate = expiry;
    notifyListeners();
  }

  void reset() {
    _isSubscribed = false;
    _expiryDate = null;
    notifyListeners();
  }

  bool get isExpired {
    if (_expiryDate == null) return true;
    return DateTime.now().isAfter(_expiryDate!);
  }
}

---

🧩 Регистрация провайдера в main.dart

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (_) => SubscriptionModel(),
      child: const MyApp(),
    ),
  );
}

---
Использование подписки в UI

Consumer<SubscriptionModel>(
  builder: (context, model, _) {
    if (model.isSubscribed) {
      return const PremiumContent();
    }

    return Column(
      children: [
        const Text("Оформите подписку для доступа к премиум-функциям"),
        ElevatedButton(
          onPressed: () => handleSubscription(context),
          child: const Text("Подписаться"),
        ),
      ],
    );
  },
)

---
Пример обработки подписки

Future<void> handleSubscription(BuildContext context) async {
  final model = context.read<SubscriptionModel>();

  final result = await PurchaseService.buy(); // ваша реализация

  if (result.success) {
    model.updateStatus(
      subscribed: true,
      expiry: result.expiryDate,
    );
  } else {
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(content: Text("Не удалось оформить подписку")),
    );
  }
}

---

💡 Совет: Периодически проверяйте подписку при запуске приложения — особенно если используете серверную валидацию или Webhook-обновления.

💬 Поделитесь в комментариях, как вы реализуете подписки в своих приложениях!

📌 Все советы рубрики — по хэштегу #FlutterPulseTips

#flutter #dart #provider #architecture #subscriptions #revenuecat #qonversion #boilerplate #mobiledev #FlutterPulseTips #UIUX #premiumapps