Flutter Pulse
616 subscribers
383 photos
840 links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Ускорьте Firebase Firestore на iOS

Firestore долго компилируется каждый раз, когда вы запускаете приложение с нуля...

...Хорошая новость в том, что есть решение, предоставленное invertase 🙌

Откройте файл podfile для iOS
Добавьте pod 'FirebaseFirestore'... следующим образом:


target 'Runner' do
use_frameworks!
use_modular_headers!
# ДОБАВЬТЕ ЭТО
pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '11.2.0'


Вам нужно добавить соответствующую версию, используемую в вашем Flutter-зависимости.

Оцените новую рубрику лайком 👍! Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #Firebase #iOS #Firestore #MobileDevelopment #FlutterTips
👍4
Как создать собственный RenderObject 🤔
В этой статье мы поговорим о создании собственных RenderObject в Flutter и о том, как расширять возможности стандартных виджетов 📈. Узнайте, как создавать RenderObject с примерами и разберитесь, как они появляются на свет и какие задачи решают 🌟.

Для программистов: RenderObject в Flutter - это основа для создания сложных интерфейсов 📊. Узнайте о видах RenderObjectWidget, зонах ответственности RenderObject и особенностях встроенных RenderObject 📝.

Хотите узнать, как реализовать уникальные правила взаимодействия виджетов, логику обработки касаний и высокопроизводительные анимации? 🤔 Тогда читайте нашу статью о создании собственного RenderObject в Flutter и создании кастомного виджета MasonryGrid 📚.

В статье мы также рассмотрим создание галереи с помощью MasonryGridRenderObject в Flutter и то, как создать красивую и настраиваемую галерею в своем приложении 📸.

Читать здесь: https://habr.com/ru/articles/947394/
#flutter #dart #flutterpulse 🚀
Самые лучшие обновлённые пакеты за последние 24 часа

pdfrx 2.1.15 - быстрый и функциональный плагин для просмотра PDF-файлов в приложениях Flutter. Исправлены ошибки, улучшена стабильность и добавлено больше логики обработки ошибок. 👍 Лайки: 254, 📥 Скачиваний: 243К
https://pub.dev/packages/pdfrx

datadog_flutter_plugin 2.14.0 - пакет для мониторинга производительности и анализа пользовательских путей в приложениях Flutter. Исправлена ошибка valueToJs для WASM- сборок, обновлены iOS и Android SDK. 👍 Лайки: 39, 📥 Скачиваний: 667К
https://pub.dev/packages/datadog_flutter_plugin

google_sign_in_ios 6.2.1 - пакет для реализации аутентификации Google на платформах iOS и macOS. Исправлена ошибка, которая вызывала возвращение null при вызове serverAuthorizationTokensForScopes. 👍 Лайки: 45, 📥 Скачиваний: 904К
https://pub.dev/packages/google_sign_in_ios

phone_state 3.0.0 - пакет для получения статуса звонков на Android и iOS. Исправлены ошибки сборки под Android и обновлены зависимости. 👍 Лайки: 130, 📥 Скачиваний: 17.9К
https://pub.dev/packages/phone_state

clarity_flutter 1.4.1 - пакет для интеграции аналитики Clarity в приложения Flutter. Исправлена редкая проблема с остановкой загрузки сессий. 👍 Лайки: 196, 📥 Скачиваний: 161К
https://pub.dev/packages/clarity_flutter

flutter_inapp_purchase 6.7.2 - пакет для покупок внутри приложения. Добавлены purchase helper extensions, отображение цен продуктов в displayPrice. 👍 Лайки: 427, 📥 Скачиваний: 8.3К
https://pub.dev/packages/flutter_inapp_purchase

#Flutter #Dart #PubDev #FlutterPulse #FlutterPulseBestPackages #pdfrx #datadog_flutter_plugin #google_sign_in_ios #phone_state #clarity_flutter #flutter_inapp_purchase
👍1
Хранение настроек пользователя

Используйте плагин shared preferences только для некритичных данных!

Почему не стоит хранить всё в SharedPreferences:
• Shared preferences предназначены для хранения простых данных в формате ключ-значение.
• Они не подходят для хранения сложных структур данных.
• Они не оптимизированы для высокопроизводительных операций чтения/записи.
• Не храните конфиденциальные данные, так как нет гарантии, что запись будет сохранена на диске (иногда всё может быть потеряно).


// getInstance возвращает Future
// Хорошей практикой является инициализация в начале работы приложения,
// а затем использование уже инициализированного экземпляра
final SharedPreferences prefs = await SharedPreferences.getInstance();


Если вы используете Provider или Riverpod, рассмотрите возможность сделать следующее:
вызовите метод init перед отображением чего-либо и используйте SharedPreferencesBuilder
для доступа к sharedPreferences.


import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';

final sharedPreferencesProvider = Provider<SharedPreferencesBuilder>((ref) => SharedPreferencesBuilder(),
);

class SharedPreferencesBuilder implements OnStartService {
SharedPreferences? _sharedPreferences;

@override
Future<void> init() async {
if (_sharedPreferences != null) {
return;
}
_sharedPreferences = await SharedPreferences.getInstance();
}

SharedPreferences get prefs {
if (_sharedPreferences == null) {
throw Exception('SharedPreferences not loaded');
}
return _sharedPreferences!;
}
}


Prefer SharedPreferencesAsync or SharedPreferencesWithCache,
так как SharedPreferences будет объявлен устаревшим в будущих обновлениях.

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

Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDev #AppDev #ProgrammingTips #DevTips
👍3
Обзор пакетов на тему List 📝
Пакет flutter_slidable позволяет создавать списки с возможностью свайпа и настраиваемыми действиями 👍. Лайки: 5960, 📥 Скачиваний: 538К. Последнее обновление: 27 дней назад, версия 4.0.1 📅. Узнать больше: https://pub.dev/packages/flutter_slidable 📚
Пакет indexed_list_view позволяет создавать бесконечные списки с возможностью программного перехода к любому элементу по индексу 🔄. Лайки: 226, 📥 Скачиваний: 1.9К. Последнее обновление: 10 месяцев назад, версия 4.0.0 📅. Узнать больше: https://pub.dev/packages/indexed_list_view 📚
Пакет searchable_listview позволяет легко фильтровать списки, поддерживает асинхронные списки, сортировку и многое другое 🔍. Лайки: 258, 📥 Скачиваний: 3.5К. Последнее обновление: 51 день назад, версия 2.19.3 📅. Узнать больше: https://pub.dev/packages/searchable_listview 📚
Пакет flutter_swipe_action_cell позволяет создавать ячейки, которые можно свайпать, как в родном iOS 📱. Лайки: 452, 📥 Скачиваний: 21.2К. Последнее обновление: 16 дней назад, версия 3.1.6 📅. Узнать больше: https://pub.dev/packages/flutter_swipe_action_cell 📚
Пакет animated_reorderable_list позволяет создавать анимированные списки и сетки с функцией перетаскивания 🔄. Лайки: 170, 📥 Скачиваний: 11.4К. Последнее обновление: 5 месяцев назад, версия 1.3.0 📅. Узнать больше: https://pub.dev/packages/animated_reorderable_list 📚
Пакет drag_and_drop_lists позволяет создавать двухуровневые списки с перетаскиванием элементов между списками и внутри них 📈. Лайки: 445, 📥 Скачиваний: 13.5К. Последнее обновление: 9 месяцев назад, версия 0.4.2 📅. Узнать больше: https://pub.dev/packages/drag_and_drop_lists 📚
#flutter #dart #pubdev #flutterpulse #flutterpulsethemedpackages #flutter_slidable #indexed_list_view #searchable_listview #flutter_swipe_action_cell #animated_reorderable_list #drag_and_drop_lists
👍1
Самые лучшие обновлённые пакеты за последние 24 часа

analyzer 8.2.0
Пакет analyzer используется для статического анализа кода на языке Dart и полезен для интеграции с инструментами и встраивания в редакторы.
В новой версии обновлены ограничения SDK, а также deprecated несколько методов и свойств, таких как Diagnostic.data, CatchClauseParameter.declaredElement и другие.
👍 Лайки: 300, 📥 Скачиваний: 12.4М
https://pub.dev/packages/analyzer

Chopper 8.4.0
Теперь доступна поддержка отменяемых запросов и изменен механизм таймаута.
Требуется Dart SDK 3.7.0.
👍 Лайки: 880, 📥 Скачиваний: 137К
https://pub.dev/packages/chopper

intl_phone_number_input 0.7.5
Этот пакет используется для ввода номеров телефонов в международном формате в приложениях Flutter. В новой версии исправлена ошибка в форматировании ввода, добавлены новые тесты и улучшена документация.
👍 Лайки: 897, 📥 Скачиваний: 72.8К
https://pub.dev/packages/intl_phone_number_input

flutter_map 8.2.2
Теперь пакет содержит исправления ошибок, которые влияли на пользователей, включая предотвращение краха из-за использования отрицательного TileLayer.zoomOffset и проверку того, что MapCamera.zoom является конечным.
👍 Лайки: 2050, 📥 Скачиваний: 239К
https://pub.dev/packages/flutter_map

go_router 16.2.2
Этот пакет используется для декларативного маршрутизации в приложениях Flutter, предоставляя удобный, основанный на URL, API для навигации между разными экранами.
В новой версии исправлены сломанные ссылки в readme.
👍 Лайки: 5480, 📥 Скачиваний: 2.1М
https://pub.dev/packages/go_router

analyzer_plugin 0.13.8
Теперь требует версию 8.2.0 пакета analyzer и Dart SDK ^3.9.0. Этот пакет используется для создания плагинов для сервера анализа, написанных на Dart.
👍 Лайки: 44, 📥 Скачиваний: 3.7М
https://pub.dev/packages/analyzer_plugin

#Flutter #Dart #PubDev #FlutterPulse #FlutterPulseBestPackages #analyzer #Chopper #intl_phone_number_input #flutter_map #go_router #analyzer_plugin
Builder with Dart
Dart позволяет сделать это без какого-либо шаблонного кода 🚀

В Dart вы можете использовать cascade notation для последовательного выполнения операций над одним и тем же объектом 🔥


class MyModel {
String? name;
String? title;
int? count;

MyModel({
this.name,
this.title,
this.count,
});
}

void main() {
final model = MyModel()
..name = 'John Doe' // Установка имени
..title = 'Software Engineer' // Установка должности
..count = 42; // Установка счетчика

final model2 = MyModel()
..name = 'Jane Doe'
..title = 'Data Scientist'
..count = 100;
}


В этом примере мы используем cascade notation (..), чтобы задать значения полям объекта MyModel последовательно 💡

Зачем это нужно?
- Упрощает код, убирая необходимость в отдельных методах-сеттерах 🔄
- Делает код более читаемым и удобным для поддержки 📖

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

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

#flutter #dart #flutterpulse #FlutterPulseTips #DartTips #MobileDevelopment #CodingTips #SoftwareDevelopment #CascadeNotation
👍6👎1
📊 Обзор пакетов на тему Table в Flutter

🔥 DataTable2 2.6.0
Улучшенная замена стандартных DataTable и PaginatedDataTable в Flutter! Липкие заголовки, автоматическая прокрутка и гибкие настройки ширины колонок.
❤️ 946 лайков | 📥 149K скачиваний
🔄 Обновлено: 6 месяцев назад
https://pub.dev/packages/data_table_2

🚀 Syncfusion Flutter DataGrid
Высокопроизводительная таблица с сортировкой, группировкой, экспортом в Excel/PDF и поддержкой тем.
❤️ 843 лайка | 📥 70.4K скачиваний
🔄 Обновлено: 3 дня назад
https://pub.dev/packages/syncfusion_flutter_datagrid

📊 TrinaGrid 2.0.2
Мощная таблица с сортировкой, фильтрацией и поддержкой всех платформ.
❤️ 90 лайков | 📥 7.4K скачиваний
🔄 Обновлено: 18 дней назад
https://pub.dev/packages/trina_grid

Advanced Table Widget
Таблицы с анимациями, ленивой загрузкой и кастомными стилями.
❤️ 19 лайков | 📥 171 скачивание
🔄 Обновлено: 7 месяцев назад
https://pub.dev/packages/flutter_advanced_table

🔄 material_table_view 5.5.2
Гибкий виджет с фиксированными строками/колонками и поддержкой миллиардов строк.
❤️ 209 лайков | 📥 5.6K скачиваний
🔄 Обновлено: 33 дня назад
https://pub.dev/packages/material_table_view

🌐 Davi 4.0.1
Мощная таблица для веб- и десктоп-приложений с бесконечной прокруткой и объединением ячеек.
❤️ 70 лайков | 📥 778 скачиваний
🔄 Обновлено: 8 месяцев назад
https://pub.dev/packages/davi

#Flutter #Dart #PubDev #FlutterPulse #DataTable #Syncfusion #TrinaGrid #AdvancedTable #MaterialTableView #Davi
Самые лучшие обновлённые пакеты за последние 24 часа

flutter_timezone 5.0.0
Плагин для Flutter, который позволяет работать с часовыми поясами. Теперь минимальная версия MacOS повышена до 10.14, а API возвращает объекты TimezoneInfo с именем часового пояса и локализованным названием (на поддерживаемых платформах).
👍 Лайки: 298, 📥 Скачиваний: 551К
https://pub.dev/packages/flutter_timezone

flutter_polyline_points 3.1.0
Плагин для декодирования polyline-пунктов из Google Maps Directions API и нового Google Routes API. Теперь с версией 3.1.0 добавлена валидация для режимов передвижения на велосипеде и пешком, а также исправлены проблемы с декодированием на веб-страницах и промежуточных местах.
👍 Лайки: 637, 📥 Скачиваний: 61.7К
https://pub.dev/packages/flutter_polyline_points

gql_http_link 1.2.0
Плагин для выполнения запросов GraphQL через HTTP с использованием JSON. В новой версии улучшена производительность декодера JSON, исправлены ошибки и добавлены новые функции.
👍 Лайки: 21, 📥 Скачиваний: 481К
https://pub.dev/packages/gql_http_link

jaspr 0.21.2
Современный фреймворк для создания веб-сайтов на Dart, поддерживающий как клиентскую, так и серверную отрисовку. В новой версии добавлено html-домен к инструменту tooling daemon.
👍 Лайки: 551, 📥 Скачиваний: 11.3К
https://pub.dev/packages/jaspr

google_maps 8.2.0
Плагин для интеграции Google Maps JavaScript API v3 в приложения на Dart. В новой версии обновлено до v3.62 документации.
👍 Лайки: 123, 📥 Скачиваний: 722К
https://pub.dev/packages/google_maps

vibration 3.1.4
Плагин для обработки Vibration API на iOS, Android и web. В новой версии внесены значительные изменения, включая обновление зависимостей и требования к Android Gradle Plugin, Gradle wrapper и Kotlin.
👍 Лайки: 883, 📥 Скачиваний: 247К
https://pub.dev/packages/vibration

#flutter #dart #pubdev #FlutterPulse #FlutterPulseBestPackages #flutter_timezone #flutter_polyline_points #gql_http_link #jaspr #google_maps #vibration
Как создать таймер
Создание точного таймера с помощью Flutter

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

Проблема с обычным таймером:
- Задержки и тики могут быть не идеально точными, особенно при высокой нагрузке на CPU.

Мы используем специальные колбэки для обновления виджета с анимациями. Обновляем наш виджет каждую секунду и запускаем анимацию соответствующим образом.

Код контроллера таймера:


class TimerController {
Timer? _timer;
DateTime? timerEndTime;
DateTime? timerStartTime;
TimerState state;
Duration duration;
Duration? remaining;
VoidCallback? onInit;
VoidCallback? onStart;
VoidCallback? onPause;
TimerTick? onTick;
List<VoidCallback> onCompleteListener;
List<VoidCallback> _onTickListener;

BasicTimerController({
required this.state,
required this.duration,
required this.timerEndTime,
this.remaining,
this.timerStartTime,
}) : onCompleteListener = [],
_onTickListener = [] {
remaining ??= duration;
}

Duration? get elapsed {
if (remaining == null) {
return null;
}
return duration - remaining!;
}

void start() {
state = TimerState.running;
final isNewTimer = remaining == null;
if (isNewTimer) {
timerStartTime = DateTime.now();
timerEndTime = timerStartTime!.add(duration);
} else {
timerEndTime = DateTime.now().add(remaining!);
timerStartTime = timerEndTime!.subtract(remaining!);
}

onInit?.call();
onStart?.call();
remaining ??= duration;

// Мы могли бы обновлять чаще, но это было бы бесполезно
const timerFrequency = Duration(milliseconds: 1000);
_timer = Timer.periodic(timerFrequency, (timer) {
if (remaining == null || remaining! <= Duration.zero) {
stop();
return;
}
if (timerEndTime == null) {
return;
}
remaining = timerEndTime!.difference(DateTime.now());
onTick?.call(remaining!);
for (final listener in _onTickListener) {
listener();
}
});
}

@override
void pause() {
_timer?.cancel();
state = TimerState.paused;
}
}



Ключевые моменты:
- Если вы знаете, когда таймер должен начаться и закончиться, ваш таймер останется точным, даже если пользователь закроет приложение и вернется.

Оцените нашу новую рубрику! 👍 Оставьте ваши отзывы в комментариях! 💬

Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #AppDevelopment #ProgrammingTips #Таймер #Точность #FlutterРазработка
👍1
📌 Обзор пакетов на тему Form в Flutter

flutter_form_builder
Упрощает создание форм в Flutter с готовыми полями (чекбоксы, слайдеры) и валидацией.
👍 2730 | 📥 215K | 🔄 37 дней назад
pub.dev/packages/flutter_form_builder

formz 0.8.0
Универсальное решение для валидации форм в Dart. Чистый код и удобное управление состояниями.
👍 893 | 📥 123K | 🔄 11 мес. назад
pub.dev/packages/formz

FForm 5.2.5
Мощный инструмент для управления формами с асинхронной валидацией и кастомными ошибками.
👍 181 | 📥 152 | 🔄 4 мес. назад
pub.dev/packages/fform

form_builder_validators 11.2.0
Готовые валидаторы для любых FormField (email, кредитные карты) с поддержкой 20+ языков.
👍 354 | 📥 193K | 🔄 3 мес. назад
pub.dev/packages/form_builder_validators

survey_kit 1.0.2
Создавайте профессиональные опросы с гибкой навигацией и кастомизацией.
👍 124 | 📥 1580+ | 🔄 11 дней назад
pub.dev/packages/survey_kit

reactive_forms 18.1.1
Модель для работы с формами, вдохновлённая Angular Reactive Forms.
👍 917 | 📥 67.2K | 🔄 2 мес. назад
pub.dev/packages/reactive_forms

#flutter #dart #pubdev #flutterpulse #flutterpulsethemedpackages #forms #validation