en
Feedback
Flutter Pulse

Flutter Pulse

Open in Telegram

На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.

Show more
1 022
Subscribers
No data24 hours
+17 days
+430 days
Posts Archive
Flutter Tip: Как сделать всплывающие окна снизу точно по размеру контента (без лишнего пространства!) При создании мобильных приложений на Flutter часто возникает необходимость отображать всплывающие окна снизу. Однако, по умолчанию, высота этих окон может быть больше, чем содержимое, что выглядит не очень эстетично. В этой статье мы рассмотрим, как использовать виджет IntrinsicHeight, чтобы сделать всплывающие окна точно по размеру контента. Проблема: По умолчанию высота всплывающего окна больше, чем содержимое. Решение: Использовать виджет IntrinsicHeight.

showCupertinoModalPopup<void>(
  context: context,
  builder: () => const IntrinsicHeight(
    child: RecordChoiceSelector(),
  ),
);
Ещё несколько полезных советов по Flutter: - Адаптивная верстка: Используйте ResponsiveLayout, чтобы адаптировать ваше приложение под разные размеры экранов. Это поможет обеспечить удобный пользовательский опыт на различных устройствах, от телефонов до планшетов.

class ResponsiveLayout extends StatelessWidget {
  final Widget? small;
  final Widget? medium;
  final Widget? large;
  final Widget? xlarge;

  const ResponsiveLayout({
    required this.small,
    this.medium,
    this.large,
    this.xlarge,
  });

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        switch (getDeviceType(constraints)) {
          case DeviceType.small:
            return small ?? Container();
          case DeviceType.medium:
            return medium ?? small ?? Container();
          case DeviceType.large:
            return large ?? medium ?? small ?? Container();
          case DeviceType.xlarge:
            return xlarge ?? large ?? medium ?? small ?? Container();
        }
      },
    );
  }

  DeviceType getDeviceType(BoxConstraints constraints) {
    // Логика определения типа устройства на основе ширины экрана
  }
}
- Открытие настроек приложения: Используйте пакет url_launcher или permission_handler, чтобы открыть настройки приложения на iOS или Android. Это полезно, когда пользователь отклоняет уведомления, и вы хотите помочь ему включить их в настройках.

// Использование url_launcher
Future<void> openSettings() async {
  Uri url;
  if (Platform.isIOS) {
    url = Uri.parse('app-settings:');
  } else if (Platform.isAndroid) {
    url = Uri.parse('package:uly.vlog.diary');
  } else {
    throw Exception('Unsupported platform');
  }

  if (await canLaunchUrl(url)) {
    await launchUrl(url);
  } else {
    throw 'Could not launch $url';
  }
}

// Использование permission_handler
import 'package:permission_handler/permission_handler.dart';

openAppSettings();
Все подобные новости можно найти по хэштегу #FlutterPulseTips. Оцените новую рубрику и напишите в комментариях, какие темы вам наиболее интересны! 👍💬 #flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #FlutterTips #AppDevelopment #UIUX #CodingTips

Лучшие обновленные пакеты за последние 24 часа! 🚀 material_table_view 5.5.0 Добавлены новые виджеты: ExpandableTableRow и TableRowAnimatedSize. Новая функциональность popupCellPadding для TableColumnControlHandlesPopupRoute. Новый аргумент physicsHorizontal для TableView и SliverTableView. 👍 Лайки: 183, 📥 Скачиваний: 3.7К https://pub.dev/packages/material_table_view Dart Sass 1.89.2 Исправлена ошибка компиляции, вызванная устаревшей зависимостью buf. Dart Sass - это реализация Sass на языке Dart, позволяющая сделать CSS более интересным и удобным в использовании. 👍 Лайки: 18, 📥 Скачиваний: 184К https://pub.dev/packages/sass live_activities 2.4.0 Добавлена поддержка Android Live Activities, исправлены ошибки и обновлена документация. Теперь live-активности доступны не только на iOS, но и на Android! 👍 Лайки: 501, 📥 Скачиваний: 9.4К https://pub.dev/packages/live_activities sqlite3_flutter_libs 0.5.34 Обновлена библиотека SQLite до версии 3.50.1. Этот пакет позволяет использовать библиотеку SQLite в Flutter-приложениях на Android, iOS, macOS, Linux и Windows. 👍 Лайки: 160, 📥 Скачиваний: 257К https://pub.dev/packages/sqlite3_flutter_libs pdfrx 1.1.34 Добавлена поддержка Windows ARM64, исправлены ошибки с кэшированием и обработкой параметров, обновлена документация. pdfrx - это быстрый и функциональный просмотрщик PDF. 👍 Лайки: 216, 📥 Скачиваний: 144К https://pub.dev/packages/pdfrx Flutter Chat UI 2.5.2 Обновлена зависимость до последней версии. Пакет Flutter Chat UI - это открытый исходный код для создания чата в приложениях на Flutter. 👍 Лайки: 1490, 📥 Скачиваний: 69.4К https://pub.dev/packages/flutter_chat_ui #material_table_view #DartSass #live_activities #sqlite3_flutter_libs #pdfrx #FlutterChatUI #flutter #dart #pubdev #FlutterPulse #FlutterPulseBestPackages

photo content

Обзор пакетов на тему "Аватарки, Изображения Профилей и Чат-Хеды" 📦️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️

Легко направляйте пользователей: наложения туториалов в Flutter с pal_widgets Хотите улучшить опыт пользователей вашего Flutter-приложения? 🤔 Используйте пакет pal_widgets для создания интерактивных туториалов! 📚 Шаги для реализации туториала: 1. Установите pal-widgets из pub.dev. 2. Добавьте HelperOrchestrator над вашей страницей или приложением. 3. Создайте экран туториала, используя AnchoredHelper. 4. Присвойте уникальный ключ виджету, который хотите показать. 5. Отобразите туториал после загрузки страницы с помощью WidgetsBinding. Пример кода:


Dart
// Генерация уникального ключа для виджета
Key key = HelperOrchestrator.of(context).generateKey('test1');

// Создание экрана туториала
AnchoredHelper(
  helper: AnchoredHelperItem(
    // Смещение подсказки
    offset: Offset(0, 20),
    // Стиль подсказки
    style: HelperStyle(
      backgroundColor: Colors.blue,
      textColor: Colors.white,
    ),
    // Текст подсказки
    text: 'Нажмите на эту кнопку, чтобы увеличить счетчик Flutter Demo.',
  ),
  // Фабрика для привязки подсказки к виджету
  widgetFactory: (child) => AnchoredHelperWidget(
    key: key,
    child: child,
  ),
);

// Отображение туториала после загрузки страницы
WidgetsBinding.instance.addPostFrameCallback((_) {
  HelperOrchestrator.of(context).showAnchoredHelper('text2', helper1);
});

Преимущества: - Легко создавайте многошаговые туториалы. - Сохраняйте прогресс пользователя. - Настройте внешний вид и поведение туториала. Улучшите опыт пользователей вашего приложения с помощью туториалов! 👍 Все подобные новости можно найти по хэштегу #FlutterPulseTips Оцените новую рубрику и напишите свое мнение! 🤔💬 #flutter #dart #flutterpulse #FlutterPulseTips #mobiledevelopment #appdevelopment #tutorial #uiux #FlutterTips #coding #programming #userexperience

Лучшие обновленные пакеты за последние 24 часа! 🚀 Flutter Chat UI 2.5.1 Пакет для создания чата в приложениях на Flutter. Исправлена ошибка, связанная с размытием поля ввода сообщения. 👍 1.49К лайков, 📦 70.8К скачиваний https://pub.dev/packages/flutter_chat_ui flutter_tex 5.1.5 Пакет для отображения математических и химических формул в приложениях Flutter. Внесены незначительные исправления и изменено имя файла конфигурации MathJax. 👍 319 лайков, 📦 9.43К скачиваний https://pub.dev/packages/flutter_tex super_drag_and_drop 0.9.0 Пакет для добавления функции перетаскивания файлов и данных в Flutter-приложениях. Улучшена функциональность и исправлены ошибки. 👍 510 лайков, 📦 19.7К скачиваний https://pub.dev/packages/super_drag_and_drop More Dart - Literally! 4.6.0 Коллекция расширений для Dart. Добавлена поддержка Dart 3.8 и WASM, нормализация Unicode-строк и новые методы для работы со строками. 👍 75 лайков, 📦 163К скачиваний https://pub.dev/packages/more dcli 7.0.5 API и инструментарий для создания кроссплатформенных приложений командной строки на Dart. Исправлена ошибка, из-за которой функция sleepAsync возвращала управление сразу же. 👍 210 лайков, 📦 1.06М скачиваний https://pub.dev/packages/dcli super_context_menu 0.9.0 Пакет для создания контекстного меню в Flutter-приложениях. Добавлены новые функции и улучшения. 👍 236 лайков, 📦 13.5К скачиваний https://pub.dev/packages/super_context_menu #flutter #dart #pubdev #FlutterPulse #FlutterPulseBestPackages #flutter_chat_ui #flutter_tex #super_drag_and_drop #more #dcli #super_context_menu

photo content

CherryPick DI для Dart/Flutter проектов 🚀💻! Узнайте о новых возможностях DI-контейнера CherryPick для Flutter 📱! Теперь вы можете создавать модульные и иерархичные Scope для каждой области жизни приложения, использовать аннотации и генерацию кода для упрощения работы с зависимостями 🤩! Читайте подробнее здесь! 📄 #CherryPick #Flutter #Dart #FlutterPulse #DIконтейнер #разработка #мобильные_приложения 🚀💻

Обзор пакетов на тему "Кэширование и временное хранение" 📦️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️

Flutter tips: some useful date extension methods Привет, подписчики! Сегодня мы поговорим о полезных расширениях для работы с датами в Flutter. Расширения позволяют писать более чистый и читаемый код, что упрощает разработку и поддержку приложений. Использование расширений для дат Расширения в Dart позволяют добавлять новые методы к существующим классам. В данном случае мы будем использовать расширение для класса `DateTime`, чтобы добавить полезные методы для работы с датами.

extension DateExtension on DateTime {
  DateTime get firstDayOfWeek {
    return subtract(Duration(days: weekday - 1));
  }

  DateTime get lastDayOfWeek {
    return add(Duration(days: 7 - weekday));
  }

  DateTime get firstDayOfMonth {
    return DateTime(year, month);
  }

  bool isToday() => isSameDay(DateTime.now());

  bool isSameDay(DateTime other) {
    return day == other.day && month == other.month && year == other.year;
  }

  bool isAfterDayOrEqual(DateTime other) {
    return isAfter(other) || isSameDay(other);
  }

  bool isBeforeDayOrEqual(DateTime other) {
    return isBefore(other) || isSameDay(other);
  }

  bool isSameWeek(DateTime other) {
    final kfirstDayOfTheWeek = firstDayOfWeek;
    return other.isAfterDayOrEqual(kfirstDayOfTheWeek) && 
           other.isBefore(lastDayOfWeek);
  }
}
Пример использования Теперь давайте рассмотрим пример использования этих расширений. Вместо того, чтобы писать громоздкий код для проверки, является ли дата сегодняшней, мы можем использовать метод `isToday()`:

if (!activities.hasActivity(date) && date.isToday()) {
  // код
}
Это намного чище и читаемее, чем:

final today = DateTime.now();
if (!activities.hasActivity(date) && date.day == today.day && date.month == today.month && date.year == today.year) {
  // код
}
Оцените новую рубрику! Все подобные новости можно найти по хэштегу #FlutterPulseTips #flutter #dart #flutterpulse #FlutterPulseTips #MobileDev #CodingTips #AppDev #FlutterTips

Лучшие обновленные пакеты за последние 24 часа! 🚀 carousel_slider обновлен до версии 5.1.1! 🎉 Пакет carousel_slider - это виджет слайдера карусели для Flutter, поддерживающий бесконечную прокрутку, автоматическое воспроизведение и кастомные дочерние виджеты. В новой версии доступны новые функции и улучшения. 👍 Лайки: 5790, 📥 Скачиваний: 845К https://pub.dev/packages/carousel_slider talker_logger обновлен до версии 4.8.3! 🚀 Пакет talker_logger - это легкий и настраиваемый логгер для ваших приложений. Он позволяет создавать кастомные логи, фильтровать и форматировать вывод. В новой версии добавлен фильтр ошибок для talker_riverpod_logger. 👍 Лайки: 49, 📥 Скачиваний: 239К https://pub.dev/packages/talker_logger talker_flutter обновлен до версии 4.8.3! 🚀 Пакет talker_flutter - это продвинутый обработчик ошибок и логгер для приложений на Dart и Flutter. В новой версии добавлен фильтр ошибок для talker_riverpod_logger. 👍 Лайки: 556, 📥 Скачиваний: 168К https://pub.dev/packages/talker_flutter Talker обновлен до версии 4.8.3! 🚀 Пакет Talker - это продвинутый обработчик ошибок и логгер для приложений на Dart и Flutter. В новой версии добавлен фильтр ошибок для Riverpod Logger. 👍 Лайки: 717, 📥 Скачиваний: 236К https://pub.dev/packages/talker dcli обновлен до версии 7.0.5! 🚀 dcli - это API и инструментарий для создания кроссплатформенных приложений командной строки (CLI) и скриптов на языке программирования Dart. В новой версии исправлена ошибка, из-за которой функция sleepAsync возвращала управление сразу же, не дожидаясь окончания задержки. 👍 Лайки: 210, 📥 Скачиваний: 1.07М https://pub.dev/packages/dcli flutter_tex обновлен до версии 5.1.3! 🚀 Пакет flutter_tex позволяет отображать математические и химические формулы в приложениях Flutter, используя движок MathJax. В новой версии исправлена проблема с отображением нескольких TeXView. 👍 Лайки: 319, 📥 Скачиваний: 9.45К https://pub.dev/packages/flutter_tex #carousel_slider #talker_logger #talker_flutter #Talker #dcli #flutter_tex #flutter #dart #pubdev #FlutterPulse #FlutterPulseBestPackages

photo content

**Обзор пакетов на тему Generic Picker** 📦 **1. Flutter Material Pickers** 📈 Пакет Flutter Material Pickers содержит часто используемые диалоги выбора дизайна Material Design. Включает в себя новые и обёртки существующих пикеров с общим диалогом и функцией доступа. Лайков: 232, Скачиваний: 2.9К Последнее обновление: 12 месяцев назад https://pub.dev/packages/flutter_material_pickers **2. Numeric Selector** 🚀 Numeric Selector - это настраиваемый пакет для создания горизонтальных и вертикальных числовых селекторов с плавной прокруткой и опциональной вибрационной обратной связью. Лайков: 4, Скачиваний: 503 Последнее обновление: 4 месяца назад https://pub.dev/packages/numeric_selector **3. FilterList** Пакет FilterList позволяет легко реализовать поиск и фильтрацию данных в вашем приложении. Лайков: 419, Скачиваний: 1.9К Последнее обновление: 12 месяцев назад https://pub.dev/packages/filter_list **4. flutter_picker_plus** Это мощный и настраиваемый виджет выбора для приложений Flutter. Лайков: 47, Скачиваний: 14.1К Последнее обновление: 40 часов назад https://pub.dev/packages/flutter_picker_plus **5. Day Month Picker** Этот пакет позволяет пользователям выбирать день и месяц из диалогового окна. Лайков: 29, Скачиваний: 80 Последнее обновление: 7 месяцев назад https://pub.dev/packages/day_month_picker **6. Bottom Picker** Теперь поддерживает desktop и web, наряду с mobile. Лайков: 332, Скачиваний: 12.1К Последнее обновление: 47 часов назад https://pub.dev/packages/bottom_picker #flutter #dart #pubdev #flutterpulse #flutterpulsethemedpackages #fluttermaterialpickers #numericselector #filterlist #flutterpickerplus #daymonthpicker #bottompicker

Flutter tips: how to create a responsive layout Адаптивный макет: советы по Flutter Привет, разработчики! 👋 Сегодня мы поговорим о создании адаптивного макета в Flutter. 📱💻 Адаптация макета под разные размеры экранов 📐 Чтобы ваше приложение выглядело отлично на разных устройствах, необходимо адаптировать макет под различные размеры экранов. 📊

import 'package:flutter/widgets.dart';

// Перечисление типов устройств
enum DeviceType { small, medium, large, xlarge }

// Виджет, который адаптирует свой контент к текущему типу устройства
class ResponsiveLayout extends StatelessWidget {
  final Widget? small; // Виджет для маленьких экранов
  final Widget? medium; // Виджет для средних экранов
  final Widget? large; // Виджет для больших экранов
  final Widget? xlarge; // Виджет для очень больших экранов

  const ResponsiveLayout({
    super.key,
    required this.small,
    this.medium,
    this.large,
    this.xlarge,
  });

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        // Определение типа устройства на основе ширины экрана
        switch (getDeviceType(constraints)) {
          case DeviceType.small:
            return small!; // Возвращаем виджет для маленьких экранов
          case DeviceType.medium:
            return medium ?? small!; // Возвращаем виджет для средних экранов или fallback к маленькому
          case DeviceType.large:
            return large ?? medium ?? small!; // Возвращаем виджет для больших экранов или fallback
          case DeviceType.xlarge:
            return xlarge ?? large ?? medium ?? small!; // Возвращаем виджет для очень больших экранов или fallback
        }
      },
    );
  }

  // Метод для определения типа устройства на основе ограничений
  DeviceType getDeviceType(BoxConstraints constraints) {
    return switch (constraints.maxWidth) {
      > 1200 => DeviceType.xlarge, // Очень большой экран
      > 1024 => DeviceType.large, // Большой экран
      > 768 => DeviceType.medium, // Средний экран
      _ => DeviceType.small, // Маленький экран
    };
  }
}
Пример использования:

ResponsiveLayout(
  small: SigninForm(), // Форма входа для маленьких экранов
  medium: Center( // Центрирование для средних экранов и больше
    child: ConstrainedBox(
      constraints: BoxConstraints(maxWidth: 600), // Ограничение максимальной ширины
      child: SigninForm(), // Форма входа
    ),
  ),
)
Этот код позволяет создать адаптивный макет, который будет корректно отображаться на различных устройствах. 📱💻 Оцените новую рубрику и напишите своё мнение в комментариях! 💬 Все подобные новости можно найти по хэштегу #FlutterPulseTips #flutter #dart #flutterpulse #FlutterPulseTips #MobileDev #AppDev #UIUX #ProgrammingTips #CodingTips

Лучшие обновленные пакеты за последние 24 часа! purchases_flutter 8.10.1 Пакет используется для упрощения реализации подписок и покупок в приложениях Flutter. В новой версии обновлены зависимости, включая purchases-hybrid-common до версии 13.35.0. 👍 Лайки: 805, 📥 Скачиваний: 147К https://pub.dev/packages/purchases_flutter dcli_core 7.0.3 dcli_core - это набор основных библиотек, используемых в dcli. В новой версии обновлено описание пакета в pubspec для более точного отражения его функциональности. 👍 Лайки: 1, 📥 Скачиваний: 1.06М https://pub.dev/packages/dcli_core very_good_analysis 9.0.0 Пакет very_good_analysis предоставляет набор правил линтинга для Dart и Flutter. В новой версии обновлены зависимости и исправлены некоторые ошибки. 👍 Лайки: 699, 📥 Скачиваний: 397К https://pub.dev/packages/very_good_analysis flutter_calendar_carousel 2.5.4 Этот пакет позволяет создавать горизонтально прокручиваемые календари для Flutter. В новой версии обновлена зависимость intl. 👍 Лайки: 463, 📥 Скачиваний: 39К https://pub.dev/packages/flutter_calendar_carousel go_router 15.1.3 Пакет go_router - это декларативный пакет маршрутизации для Flutter. В новой версии обновлена минимальная поддерживаемая версия SDK и исправлена опечатка в документации API. 👍 Лайки: 5310, 📥 Скачиваний: 1.7М https://pub.dev/packages/go_router devtools_shared 3.0.0 Пакет devtools_shared используется для описания формата JSON-файлов, собираемых из Dart VM и Android ADB. В новой версии произошло разделение библиотек расширений на две части. 👍 Лайки: 18, 📥 Скачиваний: 3.7М https://pub.dev/packages/devtools_shared #purchases_flutter #dcli_core #very_good_analysis #flutter_calendar_carousel #go_router #devtools_shared #flutter #dart #pubdev #FlutterPulse #FlutterPulseBestPackages

photo content

Обзор пакетов на тему Flutter Framework 🚀 VelocityX - бесплатный, открытый и минималистичный фреймворк для создания пользовательского интерфейса в Flutter. 👍 Лайки: 1450, 📥 Скачиваний: 7300. Последнее обновление: 4.3.1 (3 месяца назад). https://pub.dev/packages/velocity_x Get - легкое и мощное решение для Flutter, сочетающее в себе высокопроизводительное управление состоянием, умную инъекцию зависимостей и управление маршрутами. 👍 Лайки: 15300, 📥 Скачиваний: 674К. Последнее обновление: 4.7.2 (3 месяца назад). https://pub.dev/packages/get Stacked - фреймворк для создания производственных приложений на Flutter, позволяющий писать тестируемый и поддерживаемый код. 👍 Лайки: 1470, 📥 Скачиваний: 73.7К. Последнее обновление: 3.4.4 (5 месяцев назад). https://pub.dev/packages/stacked Flutter Clean Architecture - пакет для реализации Чистой Архитектуры в Flutter, основанной на концепциях Дяди Боба. 👍 Лайки: 410, 📥 Скачиваний: 760. Последнее обновление: 6.0.2 (8 дней назад). https://pub.dev/packages/flutter_clean_architecture Flutter Modular - решение для модульной структуры вашего проекта на Flutter, предлагающее модульные маршруты и модульную инъекцию зависимостей. 👍 Лайки: 1300, 📥 Скачиваний: 108К. Последнее обновление: 6.3.4 (12 месяцев назад). https://pub.dev/packages/flutter_modular Get CLI - пакет для автоматизации создания проектов на Flutter, версия 1.9.1. 👍 Лайки: 673, 📥 Скачиваний: 4.2К. Последнее обновление: 9 месяцев назад. https://pub.dev/packages/get_cli #flutter #dart #pubdev #flutterpulse #flutterpulsethemedpackages #velocityx #get #stacked #fluttercleanarchitecture #fluttermodular #getcli

Привет, разработчики Flutter! 🚀 👋 Анна, Friflex Flutter Team Lead, и сегодня хочет нам рассказать вам о Platform Channels - основном механизме общения нативного и Dart-кода во Flutter-приложениях 🤝. Это общий термин для названия всех видов каналов, и он очень важен для получения информации из платформы или использования ее функционала 📊. Есть три вида платформенных каналов: ▫️ MethodChannel - канал для одноразовых асинхронных вызовов методов платформы 📞 ▫️ EventChannel - канал для непрерывного общения с платформой 📺 ▫️ BasicMessageChannel - канал для простого асинхронного обмена сообщениями с платформой 📨 При создании каналов каждому необходимо задавать свой уникальный строковый идентификатор 📝. С помощью него платформа и Flutter «стыкуются» - образуется некий мост, по которому идет передача данных 🌉. На примере плагина permission_handler мы можем увидеть, как настраивается общение с платформой 📈. В Dart-коде создается экземпляр MethodChannel, а в нативном коде Android - подключается обработчик вызовов 📊. Если вы хотите узнать больше о Platform Channels и как они работают, то переходите по ссылке и читайте полную статью 📄. Не забудьте подписаться на канал flutterpulse, чтобы быть в курсе всех последних новостей и обновлений в мире Flutter 📱! #flutter #dart #flutterpulse ❤️

Как открыть страницу настроек приложения в системе Привет, друзья! 👋 Сегодня мы поделимся с вами полезным советом о том, как открыть страницу настроек вашего приложения на устройстве пользователя. 📱💻 Зачем это нужно? 🤔 Например, если пользователь отклонил уведомления, система больше не будет запрашивать разрешение. В этом случае вы можете помочь пользователю перейти в настройки и включить уведомления вручную. 🔔 Используем url_launcher 📲

import 'package:url_launcher/url_launcher.dart';

Future<void> openSettings() async {
  Uri url;
  if (defaultTargetPlatform == TargetPlatform.iOS) {
    url = Uri.parse('app-settings:');
  } else if (defaultTargetPlatform == TargetPlatform.android) {
    url = Uri.parse('package:uly.vlog.diary');
  } else {
    throw Exception('Unsupported platform');
  }

  if (await canLaunchUrl(url)) {
    await launchUrl(url);
  } else {
    throw 'Could not launch $url';
  }
}
Или проще с permission_handler 📦

import 'package:permission_handler/permission_handler.dart';

openAppSettings();
Показываем уведомления toast с Riverpod 📢

import 'package:flutter_riverpod/flutter_riverpod.dart';

@Riverpod(keepAlive: false)
class EditAlbumNotifier extends _$EditAlbumNotifier {
  Future<void> save() {
    // например, после сохранения альбома
    ref.read(toastProvider).success(
      title: "Success",
      text: "Journal archived",
    );
  }
}

final toastProvider = Provider<ToastBuilder>((ref) => ToastBuilder());

class ToastBuilder {
  void success({
    required String title,
    required String text,
  }) {
    _showSuccessToast(
      context: navigatorKey.currentContext!,
      title: title,
      text: text,
    );
  }
}
Умный запрос оценки приложения ⭐️

class RatingSettings {
  final Duration delayBeforeAsking;
  final Duration delayBeforeAskingAgain;

  RatingSettings({
    required this.delayBeforeAsking,
    required this.delayBeforeAskingAgain,
  });
}

class Rating {
  final RatingApi _ratingApi;
  final RatingSettings settings;
  final DateTime? lastAskingDate;
  final DateTime userCreationDate;
  final DateTime _current;
  bool hasRateApp;

  Rating({
    required this.settings,
    required RatingApi ratingApi,
    required this.lastAskingDate,
    required this.userCreationDate,
    required this.hasRateApp,
  })  : _ratingApi = ratingApi,
        _current = DateTime.now();

  bool shouldAsk() {
    if (userCreationDate == null || hasRateApp) {
      return false;
    }

    final appInstallDiff = _current.difference(userCreationDate);
    if (appInstallDiff < settings.delayBeforeAsking) {
      return false;
    }

    if (lastAskingDate == null) {
      return true;
    }

    return lastAskingDate!.difference(_current) > settings.delayBeforeAskingAgain;
  }
}
Оцените новую рубрику и напишите в комментариях, что вы думаете о ней! 💬 Все подобные новости можно найти по хэштегу #FlutterPulseTips #flutter #dart #flutterpulse #FlutterPulseTips #MobileDev #AppDev #ProgrammingTips #CodingTips

По-настоящему кроссплатформенный опыт Surf с Flutter Web 🌊💻! Узнайте больше о Flutter Web: как работает рендеринг интерфейса, проблемы производительности и загрузки, а также советы по адаптации UX под веб-платформу 📊💡. Flutter Web: преодолевая ограничения и создавая универсальные приложения 🚀! Узнайте, как адаптировать мобильные приложения для веб-платформы и обеспечить ожидаемое поведение пользователей 📈. Flutter и Dart помогут вам создавать адаптивные интерфейсы для мобильных и десктопных приложений 📱🖥. Flutter Web: особенности и лучшие практики 📚! Узнайте, как создавать адаптивные приложения для веба с помощью Flutter и преодолевать основные трудности 🌟. Читать здесь 📄 #flutter #dart #flutterpulse 🚀💻📈