Flutter Pulse
613 subscribers
386 photos
844 links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
🚀 Расширяем возможности Flutter с помощью FFI: бинарники и компиляция под капотом!

🔥 Готовы погрузиться в мир нативной магии? В новом видео от эксперта Руслана Цицера — ключевые секреты интеграции C/C++ библиотек во Flutter через FFI! Узнайте, как избежать подводных камней и заставить "железо" работать на вас.

👉 СМОТРЕТЬ ВИДЕО 👈

💡 В этом выпуске:
🔧 Две главные проблемы FFI и их элегантные решения:
1️⃣ Выбор компилятора — почему для iOS, Android и macOS нужны разные инструменты и как их настроить
2️⃣ Интеграция бинарников — куда поместить скомпилированные библиотеки, чтобы Flutter их "увидел"

📦 Практические примеры:
- Работа с Makefile и скриптами сборки
- Особенности подключения под Android (jniLibs) и iOS (Framework + Info.plist)
- Автоматизация переноса бинарников

🚨 Внимание, лайфхак! Для iOS показан работающий метод подключения через "кустарные" CocoaPods — минимум конфигурации, максимум результата!

🔗 Ресурсы:
- GitHub с примерами кода

💬 "Если вы работаете с нативным кодом — это видео сэкономит вам часы поисков!"

👍 Не пропустите! Узнайте, как:
- Собрать универсальные бинарники под любую платформу
- Избежать ошибок ABI-совместимости
- Оптимизировать процесс сборки

👉 Подписывайтесь на канал, жмите 🔔 колокольчик, чтобы не пропустить новые выпуски! Ваши лайки и комментарии — лучшая мотивация для автора 💙

И про реакции на нашем канале тоже не забывайте!) 👍

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube #FFI #Rust #NativeCode #MobileDevelopment
1
Вложенная навигация с Go_Router
Давайте создадим боковую панель с Flutter Web и go_router 🤔

Вместо того, чтобы напрямую добавлять все маршруты (GoRoute), мы обернём их в поднавигацию 📦

Мы обернём все подмаршруты в StatefulShellRoute, чтобы управлять состоянием поднавигации 🔄

Для каждого подмаршрута у нас будет StatefulShellBranch, который может содержать несколько маршрутов 🌐

Каждый элемент будет иметь свой собственный стек навигации 📚



import 'package:go_router/go_router.dart'; // Импорт библиотеки go_router

GoRouter generateRouter() {
return GoRouter(
routes: [
// Страница без боковой панели
GoRoute(
name: 'signin',
path: '/signin',
builder: (context, state) => const SignInPage(),
),
// Страница с боковой панелью
StatefulShellRoute(
parentNavigatorKey: navigatorKey, // Ключ навигатора родительского маршрута
// Боковая панель будет отображаться слева
builder: (context, state, navigationShell) => Row(
children: [
SideBar(state: state), // Боковая панель
Expanded(child: navigationShell), // Содержимое навигации
],
),
// builder будет вызван, когда маршрут активируется
// navigationShell - виджет, который отображает содержимое маршрута
// Он будет показывать текущую последнюю страницу стека навигации для каждой ветки
navigatorContainerBuilder: (
BuildContext context,
StatefulNavigationShell navigationShell,
List<Widget> children,
) {
if (children.isEmpty) {
return SizedBox(); // Пустой контейнер, если нет дочерних элементов
}
return Scaffold(
body: children[navigationShell.currentIndex], // Отображение текущего дочернего элемента
);
},
branches: [
StatefulShellBranch(
routes: [
GoRoute(
name: 'users',
path: '/users',
builder: (context, state) => const UsersPage(),
),
GoRoute(
name: 'user profile',
path: '/users/:userId',
builder: (context, state) => const UserProfilePage(),
),
],
),
StatefulShellBranch(
routes: [
GoRoute(
name: 'notifications',
path: '/notifications',
builder: (context, state) => const NotificationsPage(),
),
],
),
],
),
],
);
}



Оцените новую рубрику 👍👏! Все подобные новости можно найти по хэштегу #FlutterPulseTips. Не забудьте подписаться и следить за новыми советами 🔔

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #FlutterTips #GoRouter #NestedNavigation #FlutterWeb
👍3👨‍💻1
Привет, программисты! 🤩 У вас когда-нибудь возникала задача связать два виджета в разных частях дерева, чтобы один точно позиционировался относительно другого? 🤔 Это может быть полезно при создании dropdown'ов, подсказок и overlay-элементов 📝. В новой статье Сёрфы делятся гайдом, как связать видженты с помощью LayerLink 📈. Объясняют, как работают target и follower, и почему без них не обойтись при создании этих элементов 🏄. Если вы хотите быть в курсе всех последних новостей и гайдов по Flutter и Dart, то стоит подписаться на flutterpulse 📊! #flutter #dart #flutterpulse 😊
Самые лучшие обновлённые пакеты за последние 24 часа

Firebase Messaging Plugin for Flutter 15.2.1
Плагин для Flutter, который позволяет использовать Firebase Cloud Messaging API. Убрано устаревшее сообщение (#16995).
👍 Лайки: 3690, 📥 Скачиваний: 1.1M
https://pub.dev/packages/firebase_messaging

JOSE 0.3.5
Теперь поддерживает архив ^4.0.0 и сжатые данные в JWE.
Лайков: 69, Скачиваний: 375000
https://pub.dev/packages/jose

agora_rtc_engine 6.5.3
Этот пакет используется для добавления функций видео и аудио коммуникаций в приложения, построенные на Flutter.
В новой версии исправлены ошибки компиляции, устранено мерцание видео при изменении разрешения и улучшена совместимость с нижними версиями Flutter SDK.
Пакет имеет 859 лайков и 37300 скачиваний.
https://pub.dev/packages/agora_rtc_engine

envied 1.3.0
Этот пакет позволяет упростить работу с переменными окружения в приложениях Dart/Flutter. Теперь вы можете легко хранить и использовать переменные окружения в своем проекте.
В новой версии расширены ограничения версий для зависимостей build и source_gen.
Пакет envied имеет 851 лайк и более 139 000 скачиваний!
https://pub.dev/packages/envied

talker_logger 5.0.1
Теперь с исправленными документами и обновленной версией share_plus.
Лайков: 49, Скачиваний: 278000.
https://pub.dev/packages/talker_logger

flutter_blue_plus 1.36.7
Этот пакет - плагин Bluetooth Low Energy для Flutter, поддерживающий роль центрального устройства на платформах iOS, macOS, Android, Linux и Web.
В новой версии исправлены ошибки на iOS, macOS, Android и Linux, связанные с настройками и логированием.
Пакет имеет 1180 лайков и более 126 000 скачиваний.
https://pub.dev/packages/flutter_blue_plus

image_picker_android 0.8.4+11
Этот пакет используется для реализации функции выбора изображений на Android-устройствах.
Теперь он работает как федеративная реализация, отдельно от image_picker.
Лайков: 29, Скачиваний: 454000.
https://pub.dev/packages/image_picker_android

#flutter #dart #pubdev #FlutterPulse #FlutterPulseBestPackages #firebase_messaging #jose #agora_rtc_engine #envied #talker_logger #flutter_blue_plus #image_picker_android
Показываем версию вашего приложения
Полезно для поддержки клиентов или просто при тестировании новых сборок из магазинов

Отображение версии приложения может быть очень полезным, особенно когда вы тестируете новые сборки или оказываете поддержку клиентам. Для этого нам понадобится пакет package_info_plus. Установите его, добавив в ваш pubspec.yaml:


dependencies:
package_info_plus: ^latest_version



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


class AppVersion extends StatelessWidget {
const AppVersion({super.key});

Future<PackageInfo> _getAppVersion() async {
// Получаем информацию о пакете приложения
final packageInfo = await PackageInfo.fromPlatform();
return packageInfo;
}

@override
Widget build(BuildContext context) {
return FutureBuilder<PackageInfo>(
future: _getAppVersion(),
builder: (context, snapshot) {
// Проверяем состояние загрузки данных
if (snapshot.connectionState == ConnectionState.waiting || snapshot.hasError) {
return const SizedBox.shrink(); // Возвращаем пустой виджет, если данные ещё не загружены или произошла ошибка
} else {
// Отображаем версию приложения и номер сборки
return Text(
"Version ${snapshot.data?.version}(${snapshot.data?.buildNumber})",
textAlign: TextAlign.center,
style: context.textTheme.bodyMedium?.copyWith(
color: context.colors.onBackground.withOpacity(.6),
),
);
}
},
);
}
}



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

Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #AppDevelopment #CodingTips #DevTips
👍2
Самые лучшие обновлённые пакеты за последние 24 часа

pool 1.5.2
Плагин для управления ограниченным пулом ресурсов, что упрощает работу с большим количеством запросов.
Убрана устаревшая версия Dart, увеличена до 3.4, а также пакет был перенесен в репозиторий dart-lang/tools.
👍 Лайки: 113, 📥 Скачиваний: 5.6М
https://pub.dev/packages/pool

webview_flutter_wkwebview 3.23.1
Плагин для реализации Apple WKWebView в webview_flutter.
В обновлении удалён код для версий iOS старше 13.0 и обновлена минимальная поддерживаемая версия SDK до Flutter 3.35.
👍 Лайки: 43, 📥 Скачиваний: 2.9М
https://pub.dev/packages/webview_flutter_wkwebview

image_cropper 10.0.0+1
Плагин для обрезки изображений.
Теперь README документ для Android исправлен, удалена заметка о работе вокруг ограничений, поскольку uCrop полностью поддерживает функцию edge-to-edge.
👍 Лайки: 2390, 📥 Скачиваний: 388К
https://pub.dev/packages/image_cropper

flutter_login 6.0.0
Плагин для входа и регистрации с множеством анимационных эффектов.
В новой версии произошли следующие изменения:
- Заменен intl_phone_number_input на form_builder_phone_field, что упрощает код и делает плагин совместимым с WASM.
- Обновлены зависимости и исправлены устаревшие члены.
👍 Лайки: 1460, 📥 Скачиваний: 4.7К
https://pub.dev/packages/flutter_login

google_sign_in 7.2.0
Плагин для авторизации с помощью учетной записи Google на платформах Android, iOS, macOS и Web.
В новой версии добавлен метод clearAuthorizationToken для удаления токена доступа из кэша, а также обновлена минимальная поддерживаемая версия SDK до Flutter 3.29/Dart 3.7.
👍 Лайки: 3460, 📥 Скачиваний: 860К
https://pub.dev/packages/google_sign_in

local_auth_darwin 1.6.1
Плагин для реализации аутентификации на устройствах iOS и macOS.
В новой версии удален код для старых версий iOS и обновлена минимальная версия поддерживаемого SDK до Flutter 3.35.
👍 Лайки: 5, 📥 Скачиваний: 984К
https://pub.dev/packages/local_auth_darwin

#Flutter #Dart #PubDev #FlutterPulse #FlutterPulseBestPackages #pool #webview_flutter_wkwebview #image_cropper #flutter_login #google_sign_in #local_auth_darwin
И ещё немного про то, что const в dart надо ставить где попало 🤔
В мире разработки на Dart и Flutter часто возникают интересные проблемы, которые требуют нестандартных решений 🤓. Одна из таких проблем связана с использованием dart-define и String.fromEnvironment 🌐. Если вы сталкиваетесь с ситуацией, когда String.fromEnvironment не видит переменные, определенные с помощью dart-define, то это сообщение для вас 📣!

Причина этой проблемы кроется в том, как Dart обрабатывает константы и переменные среды 🌟. Когда вы используете dart-define, чтобы определить переменные среды, они не всегда доступны в рантайме 🕰. Это связано с тем, что String.fromEnvironment требует, чтобы переменные были определены как константы 📝.

Решение этой проблемы простое, но не всегда очевидное 🔮: использовать const при определении переменных 📣! Да, вы правильно прочитали - const не только для констант, но и для того, чтобы сделать ваши переменные среды видимыми в рантайме 🔍.

Итак, если вы столкнулись с проблемой, когда String.fromEnvironment не видит ваши переменные, попробуйте добавить const при их определении 📝. Это должно решить проблему и сделать ваши переменные доступными в рантайме 🌟.

Flutter и Dart - это мощные инструменты для разработки, но иногда требуют творческого подхода к решению проблем 🤔. Итак, помните: const - это не только для констант, но и для того, чтобы сделать ваш код более эффективным и работающим как ожидается 📈.

Подробнее здесь:
#flutter #dart #flutterpulse 🚀💻📱
👍1
Ускорьте 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