Flutter Pulse
517 subscribers
330 photos
719 links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
🚀 Не используй StatefulWidget, пока не посмотришь это видео! Часть 2

🔥 Твой Flutter-код превращается в монолитного Франкенштейна? 🔥 Автор нового видео наглядно показывает, почему гигантские StatefulWidget'ы — это бомба замедленного действия 💣:

⚠️ Закидывая всё в один StatefulWidget, вы:
• Стреляете себе в ногу 🤯
• Обрекаете на ад мердж-конфликтов 😱
• Получаете side-эффекты в неожиданных местах


🎯 В этом туториале Руслан разбирает реальный сложный экран (не абстрактный счётчик!) и показывает универсальные шаги декомпозиции:

🔧 7 шагов к спасению кода:
1️⃣ Выносим методы из State в отдельные функции
2️⃣ Создаём класс-модель для состояния
3️⃣ Переносим логику в модель
4️⃣ Подключаем ChangeNotifier + ListenableBuilder
5️⃣ Заменяем setState на вызовы методов модели
6️⃣ Дробим на компоненты с передачей модели
7️⃣ Внедряем InheritedWidget + const виджеты

💡 Ключевой принцип: после каждого шага функциональность должна сохраняться! Автор аккуратно демонстрирует рефакторинг "на живом примере" с:
• Обработкой изображений 📸
• Диалоговыми окнами
• Динамическим обновлением данных

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

💬 "В завтрашнем ролике: почему структура папок ≠ архитектура, и как разделить приложение на слои!"

Подписывайтесь и смотрите другие кейсы по хэштегу #FlutterPulseYoutube!

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube #Refactoring #CleanCode #FlutterArchitecture #StatefulWidget #ComponentBasedUI
Правило 8 для интервалов в дизайне

Генерация визуальной гармонии на подсознательном уровне

Вы когда-нибудь задумывались, что делает дизайн визуально приятным? 🤔 Одним из секретов является соблюдение правила 8 при проектировании интервалов между элементами! 📐

Что такое правило 8?

Теория довольно проста: все элементы в вашем дизайне кратны 8 по ширине и высоте, как и расстояния между ними. 📏 Это создает ощущение гармонии и порядка, делая интерфейс более интуитивным и комфортным для пользователя. 😌

Давайте рассмотрим пример реализации этого правила во Flutter:


class AppSpacer extends StatelessWidget {
final double? width;
final double? height;

const AppSpacer._({Key? key, this.width, this.height}) : super(key: key);

factory AppSpacer.p32() => const AppSpacer._(height: 32, width: 32);
factory AppSpacer.p24() => const AppSpacer._(height: 24, width: 24);
factory AppSpacer.p16() => const AppSpacer._(height: 16, width: 16);
factory AppSpacer.p8() => const AppSpacer._(height: 8, width: 8);

@override
Widget build(BuildContext context) {
return SizedBox(
width: width,
height: height,
);
}
}



Этот код определяет виджет AppSpacer, который можно использовать для создания интервалов, кратных 8. 📝 Просто используйте один из фабричных конструкторов, таких как AppSpacer.p8(), AppSpacer.p16() и т.д., чтобы добавить нужный интервал в вашем интерфейсе. 👍

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

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

#flutter #dart #flutterpulse #FlutterPulseTips #SpacingDesign #DesignTips #FlutterTips #UIUX #MobileDev #AppDev
👍4
🚀 Архитектура Flutter: Секрет гибкости и масштабируемости!

🔥 Устали от хаоса в коде? В новом видео на нашем канале эксперт Руслан Цицер разбирает ключевую разницу между архитектурой и структурой папок во Flutter — и это не одно и то же!

Почему это важно? Правильная архитектура позволяет:
Менять структуру проекта без боли (feature-first или layer-first — выбор за вами!)
Легко масштабировать приложение
Делать рефакторинг без страха всё сломать
Создавать чистый, поддерживаемый код для командной работы

📺 В видео детально разобрано:
🔹 Реальный проект (Rick and Morty API) с избранным и пагинацией
🔹 Как разделить "монолитный" StatefulWidget на логические слои (data, domain, presentation)
🔹 Практические шаги рефакторинга: от "одной папки" до feature-first структуры
🔹 Важность абстракций (репозитории!) для гибкости
🔹 Работа с зависимостями и state-менеджментом

💡 Главный инсайт:
«При хорошей архитектуре можно использовать ЛЮБУЮ удобную структуру проекта!»

👉 Смотрите разбор + live-кодинг здесь:
Выстроим архитектуру на простом примере и посмотрим разные структуры папок

❤️ Поддержите автора:
👍 Лайкните видео, если полезно!

#Flutter #Dart #FlutterPulse #FlutterPulseTips
🔎 Ищите больше уроков по хэштегу #FlutterPulseYoutube!
Ждём... или используем скелетную анимацию?

При загрузке контента важно сделать ожидание для пользователя максимально комфортным. Есть два основных способа сделать это: использовать стандартный индикатор загрузки или скелетную анимацию.

Индикатор загрузки - простой и понятный способ показать, что контент загружается. Flutter предоставляет встроенный виджет CircularProgressIndicator.adaptive(), который адаптируется под разные платформы.

// Создает индикатор, который является 
// [CupertinoActivityIndicator] на iOS
// [CircularProgressIndicator] на других платформах
CircularProgressIndicator.adaptive();


Для более широких возможностей можно использовать пакеты, такие как:
- sleek_circular_slider
- flutter_spinkit

Скелетная анимация дает пользователю представление о том, какого типа контент загружается (изображение, текст, длинный текст и т.д.). Это воспринимается как более быстрое и плавное.

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

Для реализации скелетной анимации можно использовать пакет better_skeleton.

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

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

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #UIUX #LoadingAnimation #AppDevelopment #FlutterTips
👍1
🔥 Почему твой Flutter UI лагает и как это пофиксить? Часть 1. Смотри разбор!

Привет, Flutter-энтузиасты! Только что наткнулся на суперполезное видео, которое раз и навсегда закрывает больную тему — лаги интерфейса. Если твой UI тормозит, а FPS прыгает — это must-watch! 🚀

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

Автор (Руслан) наглядно разбирает:
🔹 Как искать узкие места через Flutter DevTools (вкладка Performance)
🔹 Почему виджеты-«монстры» убивают FPS и как их декомпозировать
🔹 Магию const — как одна правка ускоряет рендеринг в разы!
🔹 Реальные примеры: от 37 мс лагов до плавного UI

💡 Особенно полезно, если ты:
- Не понимаешь, почему интерфейс фризит
- Хочешь научиться делать замеры производительности
- Не веришь, что const — не просто «совет» 😉

📌 Это часть цикла про архитектуру Flutter! Завтра, кстати, вторая часть

💬 Поддержи канал:
👍 Лайк — если полезно!

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube #Refactoring #CleanCode #FlutterArchitecture #StatefulWidget #ComponentBasedUI #fluttertutorial

P.S. Больше лайфхаков — по хэштегу #FlutterPulseYoutube! Подписывайся на @flutterpulse, если хочешь глубже разбирать Flutter 🔥
Извлечение границ из изображения
Привет, Flutter-разработчики! 👋 Сегодня мы поделимся с вами интересным способом обработки изображений с использованием пакета Image в Dart. 📸

Используем пакет Image для извлечения границ
Пакет Image в Dart предоставляет мощные инструменты для обработки изображений. Одним из интересных применений этого пакета является извлечение границ из изображений. 🔍

Как это работает?
1. Применяем ядро Лапласа ко всем пикселям изображения с помощью функции свёртки (convolution function).
2. Ядро Лапласа помогает выделить границы на изображении, применяя определённую матрицу фильтра к каждому пикселю.

Пример кода:

import 'package:image/image.dart' as img;

// Декодируем изображение из данных
var photo = img.decodeImage(data.buffer.asUint8List());

// Определяем фильтр (ядро Лапласа)
var filter = [
0, -1, 0,
-1, 4, -1,
0, -1, 0,
];

// Применяем свёртку к изображению с использованием фильтра
photo = img.convolution(photo, filter, div: div, offset: offset);


Этот код демонстрирует, как можно использовать функцию convolution из пакета Image для применения ядра Лапласа и выделения границ на изображении. 🔮

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

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

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #ImageProcessing #CodingTips
🚨 Почему твой Flutter UI лагает и как это пофиксить? Часть 2. Глубокий разбор!

Привет, Flutter-разработчики! Руслан подготовил 🔥 огненное видео, которое раз и навсегда прольет свет на причины лагов в интерфейсе. Не просто теория — практические кейсы и инструменты!

В этом выпуске ты узнаешь:
🔹 Как простая функция может полностью заблокировать UI
🔹 Что на самом деле происходит в Raster thread
🔹 Почему выбор движка рендеринга (Skia vs Impeller) критичен для плавности
🔹 Магию RepaintBoundary и как она спасает производительность

🛠 Практика:
- Детальный разбор вкладки Performance в Flutter DevTools
- Как находить лаги, делать замеры и отлаживать UI
- Реальные примеры оптимизации «тяжелых» виджетов

👉 Смотрите видео здесь:
Почему твой Flutter UI лагает и как это пофиксить

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube
P.S. Ищете больше практики? Смотрите все видео цикла по хэштегу → #FlutterPulseYoutube! 💻
Шпаргалка по Android adb

Полезные команды для управления вашим Android-устройством через командную строку 🤖💻

Вход в оболочку телефона

adb shell # вход в оболочку телефона
# Android основан на unix, поэтому вы можете перемещаться
# и выполнять команды как в обычной unix-системе


Установка и удаление APK

adb install myApp.apk # установить apk
adb install -r myApp.apk # обновить приложение без удаления его данных
adb uninstall myApp.apk # удалить приложение


Захват изображения и видео

adb shell screencap -p /sdcard/image.png # захватить изображение
adb shell screenrecord -p /sdcard/video.mp4 # захватить видео
adb -d pull /sdcard/image.png . # извлечь изображение или видео из папки sdcard


Отображение касаний на устройстве

adb shell content insert \
--uri content://settings/system \
--bind name:s:show_touches \
--bind value:i:1 # включить отображение касаний на устройстве

adb shell content insert \
--uri content://settings/system \
--bind name:s:show_touches \
--bind value:i:0 # отключить отображение касаний на устройстве


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

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

#flutter #dart #flutterpulse #FlutterPulseTips #AndroidDev #MobileDev #DevTips #FlutterTips
👍2
🚀 ИИ в разработке: Будущее уже здесь! Смотрите лекцию ШМР 2025

Привет, Flutter-сообщество! Только что наткнулся на 🔥горячее видео, которое переворачивает представление о работе разработчика. Если ты еще не используешь AI-инструменты в повседневных задачах — этот материал станет твоим прорывом!

В лекции "Применение AI-инструментов в разработке — ШМР 2025" Сергей Кольцов (Яндекс) на реальных примерах показывает:

🧠 Как нейросети уже сегодня:
• Автоматизируют рутину (тесты, рефакторинг, документацию)
• Ускоряют поиск решений в 3-5 раз
• Помогают осваивать новые технологии

💡 Ключевые инсайты из видео:
▫️ Почему 63% разработчиков уже используют ИИ в работе
▫️ Как избежать "техдолговой ямы" при работе с AI
▫️ VSCode + Copilot vs Cursor vs Terminal Agents — что выбрать?
▫️ Реальный кейс: миграция проекта на Flutter с помощью ИИ за 10 минут ⏱️

💬 Цитата, заставляющая задуматься:
"Мы прошли горизонт событий. Взлёт начался" — Сэм Альтман (OpenAI)

👉 Смотрите полную версию с демо-примерами и прогнозами:
YouTube или VkVideo

Не забудьте подписаться на канал! Каждый день — новые фишки Flutter, разборы кейсов и лайфхаки. 🔔

👉 Все видео по теме в канале: ищите по хэштегу #FlutterPulseYoutube

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube
👍1
Измерение производительности функции в тесте

Привет, Flutter-разработчики! 👋 Сегодня мы поделимся с вами полезным советом о том, как измерить производительность функции внутри теста. 🔍

Зачем это нужно?
- Оптимизация производительности вашего приложения 🔝
- Выявление узких мест в коде 🔎
- Улучшение пользовательского опыта 👥

Пример кода:


testWidgets('проверка производительности большой функции', (
WidgetTester tester,
) async {
// Запускаем секундомер
final sw = Stopwatch()..start();
await tester.tap(find.byKey(const ValueKey('btn')));
await tester.pumpAndSettle(const Duration(milliseconds: 100));
// Проверяем, что прошедшее время меньше 500 мс
expect(sw.elapsedMilliseconds, lessThan(500));
});



Что здесь происходит? 🤔
1. Мы запускаем тест виджета с помощью `testWidgets`.
2. Запускаем секундомер (`Stopwatch`) перед выполнением тестируемой функции.
3. Выполняем необходимые действия (в данном случае тап по кнопке с ключом 'btn').
4. Проверяем, что общее время выполнения не превышает заданный порог (500 мс).

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

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

#flutter #dart #flutterpulse #FlutterPulseTips #FlutterTips #MobileDev #PerformanceOptimization #TestingInFlutter
1
🔥 Почему твоя Lottie-анимация во Flutter лагает и как это пофиксить?

Привет, Flutter-энтузиасты! 😊 Столкнулись с тормозящими анимациями, которые портят UX? Наш друг Руслан Цицер приготовил для вас супер-полезный гайд, где разбирает эту боль на реальном примере!

▶️ В этом выпуске вы увидите:
• Создание простого TODO-листа с нуля 🗒
🔍 Анализ Raster thread при добавлении Lottie-анимации
🛠 Пошаговый разбор оптимизации через Flutter DevTools
• Как находить лаги, делать замеры и отладку UI

💡 Главные фишки:
- Работа с вкладкой Performance в DevTools
- Оптимизация через RenderCacheMode.raster
- Практические лайфхаки для плавности анимаций
- Разбор кода векторной анимации "помидорки" 🍅


👇 Не пропустите детали! Смотрите видео, чтобы ваши анимации летали:
СМОТРЕТЬ ВИДЕО

💬 Пишите в комментариях: С какими сложностями в анимациях сталкивались вы?

👍 Поддержите автора:
• Ставьте лайк, если полезно!

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube #Refactoring #CleanCode #FlutterArchitecture #StatefulWidget #ComponentBasedUI #fluttertutorial
👉 Ещё видео по тегу: #FlutterPulseYoutube
Смена версии Flutter

Иногда это просто необходимо 🤔

Чтобы изменить версию Flutter, следуйте этим шагам:

1. Проверьте, где установлен Flutter на вашей системе, а затем выполните команду:


git checkout 1.22.6
# Обновление файлов: 100% (4559/4559), готово.
# Примечание: переключение на '1.22.6'.



Теперь следующая команда flutter установит все необходимые требования 📦

2. Чтобы вернуться к последней стабильной версии, просто используйте:


git checkout stable



ИЛИ

Используйте FVM, чтобы переключать версию Flutter напрямую 🔄



dart pub global activate fvm



Или используйте пакет brew... 🍺


fvm use 1.22.6



Больше информации на https://fvm.app/ 🤓

Оцените нашу новую рубрику! 👍👎
Все подобные новости можно найти по хэштегу #FlutterPulseTips

#flutter #dart #flutterpulse #FlutterPulseTips #FVM #FlutterTips #MobileDev #DevTips
🚀 Flutter Deep Linking & State Restoration: Как вернуть пользователя ТОЧНО туда, где он остановился?

Привет, Flutter-энтузиасты! Сегодня делимся 🔥горячим видео от коллег, которое перевернет ваше представление о навигации и сохранении состояния в приложениях! Речь о вебинаре «Flutter Deep Linking & State Restoration: возвращаем пользователей» из курса «Flutter Mobile Developer».

Представьте: пользователь ушел из вашего приложения (SMS, звонок, перезапуск системы), а при возвращении видит точно тот экран, поле формы или даже позицию скрола, где остановился! 💯 Магия? Нет — грамотная работа с диплинками и восстановлением состояния.

Что разобрали в видео:
- Диплинки: Scheme-based, Universal Links, App Links — чем отличаются и как внедрить.
- Навигация: Когда выбрать Navigator 1.0, а когда перейти на мощный Router API (Navigator 2.0) для сложных сценариев.
- State Restoration: Как сохранять/восстанавливать состояние UI даже после выгрузки приложения из памяти.
- Restorable Routes: Автоматический возврат пользователя в нужную точку стека навигации.
- Практика: Создание приложения с «бесшовным» UX — диплинки + восстановление состояния.

🎯 После просмотра вы сможете:
- Реализовать «умные» диплинки, которые открывают нужный экран.
- Выбирать оптимальный подход к навигации для вашего проекта.
- Избавить пользователей от потери данных в формах 🗒 или позиции в ленте.
- Сделать приложение, которое никогда не сбрасывает прогресс!

Кому будет полезно?
- Разработчикам multi-screen приложений.
- Тем, кто хочет повысить retention и UX.
- Всем, кто боролся с «сбросом» состояния после перезапуска.

💡 Главный секрет: Flutter — это не только про красивый UI, но и про контроль над каждым шагом пользователя. Видео покажет, как превратить технические возможности в конкурентное преимущество!

👉 Смотрите запись прямо сейчас:
Flutter Deep Linking & State Restoration: возвращаем пользователей

Не забудьте подписаться на канал Flutter Pulse — здесь только полезное для вашего кода! Ищите другие уроки по хэштегу #FlutterPulseYoutube 🚀

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube #DeepLinking #StateRestoration #MobileDev #UX
Создаем защиту маршрута страницы

Привет, подписчики! 👋 Сегодня мы рассмотрим полезный совет по Flutter - создание защиты маршрута страницы. 🚀

Что это такое?

Защита маршрута страницы позволяет перенаправлять пользователя на другую страницу, если определенное условие не выполнено. 🔄

Пример реализации



Route<dynamic> route(RouteSettings settings) {
switch (settings.name) {
case 'init_account':
return MaterialPageRoute(
builder: (_) => AuthenticatedGuard(child: InitAccountPage()),
);
}
}

// AuthenticatedGuard внедряет нашу защиту, чтобы предотвратить доступ неавторизованного пользователя к нашей странице

class Guard extends StatelessWidget {
final Future<bool> canActivate;
final Widget child;
final String fallbackRoute;

const Guard({
Key? key,
required this.canActivate,
required this.child,
required this.fallbackRoute,
}) : super(key: key);

@override
Widget build(BuildContext context) {
return FutureBuilder<bool>(
future: canActivate,
builder: (_, isOk) {
if (!isOk.hasData || isOk.hasError) {
return Container();
}
if (isOk.data!) {
return child; // Показываем страницу, если условие выполнено
}
redirect(context); // Иначе перенаправляем
return Container();
},
);
}

redirect(BuildContext context) {
WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
Navigator.pushReplacementNamed(context, fallbackRoute);
});
}
}



Совет для нескольких условий: вы можете каскадировать защиты или просто объединить ваши условия. 🤔

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

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

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #FlutterTips #Programming #Development #Coding #FlutterCommunity
Flutter Pulse
🔥 ВИДЕО ДНЯ: Flutter TDD Чистая Архитектура [1] - Объяснение и структура проекта Привет, Flutter-энтузиасты! 👋 Сегодня делимся 🔥горячим видео, которое перевернет ваш подход к разработке! Денис (@DenUP) детально разбирает Clean Architecture + TDD — связку…
🚀 Flutter TDD Чистая Архитектура: Entity и Use Cases — Глубокое Погружение!

Привет, коллеги! Только что наткнулся на 🔥горячее видео, которое перевернет ваш подход к разработке на Flutter. Если вы хотите создавать чистый, тестируемый и масштабируемый код — это must-watch!
Это вторая часть видео, первая уже была опубликована в нашем канале.

👉 Смотреть видео: Flutter TDD Чистая Архитектура [2] - Entity и Use Cases

Что внутри?
🔹 Entity — учимся проектировать ядро приложения, независимое от фреймворков.
🔹 Use Cases — превращаем бизнес-логику в изолированные сценарии.
🔹 TDD в действии — пишем тесты ДО кода, гарантируя надежность.
🔹 Разбор пакетов: equatable, dartz, мокирование с mockito.
🔹 Обработка ошибок через Functional Programming!

Таймкоды для навигации:

04:34 → Entities (сущности)
10:17 → Создание Domain/Repository
15:18 → UseCases
17:56 → TDD на практике (пишем тест!)
30:18 → Red/Green тестирование


💡 Автор детально объясняет, как:
- Отделить логику от реализации (даже HTTP-запросов!).
- Использовать Either для обработки ошибок.
- Тестировать Use Cases с мокированием зависимостей.

👉 Зачем смотреть?
Если вы устали от "спагетти-кода", это видео — ваш спасение! Автор на реальном примере показывает, как архитектура делает код предсказуемым, а тесты — естественной частью разработки.

💬 P.S. Больше уроков по Flutter по хэштегу #FlutterPulseYoutube! Подписывайтесь, чтобы не пропустить разборы → @FlutterPulse

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube
👎1
Полезный совет по Dart: Как изменить версию Flutter

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

Иногда возникает необходимость изменить версию Flutter. Вот как это можно сделать:

1. Проверьте, где установлен Flutter на вашей системе, а затем выполните команду:
git checkout 1.22.6
> Updating files: 100% (4559/4559), done.
> Note: switching to '1.22.6'.

После этого следующая команда flutter установит все необходимые требования.

2. Чтобы вернуться к последней стабильной версии, просто используйте:
git checkout stable

Или используйте FVM для быстрого переключения версий Flutter:

1. Активируйте FVM:
dart pub global activate fvm

2. Используйте нужную версию:
fvm use 1.22.6

Дополнительная информация доступна на сайте FVM:
https://fvm.app/docs/getting_started/installation
https://fvm.app/

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

Все подобные советы ищите по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #FlutterTips #MobileDev #DevTips #FlutterCommunity
Создаем защиту маршрута страницы

Привет, подписчики! 👋 Сегодня мы рассмотрим полезный совет по Flutter - создание защиты маршрута страницы. 🚀

Что это такое?

Защита маршрута страницы позволяет перенаправлять пользователя на другую страницу, если определенное условие не выполнено. 🔄

Пример реализации



Route<dynamic> route(RouteSettings settings) {
switch (settings.name) {
case 'init_account':
return MaterialPageRoute(
builder: (_) => AuthenticatedGuard(child: InitAccountPage()),
);
}
}

// AuthenticatedGuard внедряет нашу защиту, чтобы предотвратить доступ неавторизованного пользователя к нашей странице

class Guard extends StatelessWidget {
final Future<bool> canActivate;
final Widget child;
final String fallbackRoute;

const Guard({
Key? key,
required this.canActivate,
required this.child,
required this.fallbackRoute,
}) : super(key: key);

@override
Widget build(BuildContext context) {
return FutureBuilder<bool>(
future: canActivate,
builder: (_, isOk) {
if (!isOk.hasData || isOk.hasError) {
return Container();
}
if (isOk.data!) {
return child; // Показываем страницу, если условие выполнено
}
redirect(context); // Иначе перенаправляем
return Container();
},
);
}

redirect(BuildContext context) {
WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
Navigator.pushReplacementNamed(context, fallbackRoute);
});
}
}



Совет для нескольких условий: вы можете каскадировать защиты или просто объединить ваши условия. 🤔

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

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

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #FlutterTips #Programming #Development #Coding #FlutterCommunity
👍1
Полезный совет по Dart: Как изменить версию Flutter

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

Иногда возникает необходимость изменить версию Flutter. Вот как это можно сделать:

1. Проверьте, где установлен Flutter на вашей системе, а затем выполните команду:
git checkout 1.22.6
> Updating files: 100% (4559/4559), done.
> Note: switching to '1.22.6'.

После этого следующая команда flutter установит все необходимые требования.

2. Чтобы вернуться к последней стабильной версии, просто используйте:
git checkout stable

Или используйте FVM для быстрого переключения версий Flutter:

1. Активируйте FVM:
dart pub global activate fvm

2. Используйте нужную версию:
fvm use 1.22.6

Дополнительная информация доступна на сайте FVM:
https://fvm.app/docs/getting_started/installation
https://fvm.app/

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

Все подобные советы ищите по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #FlutterTips #MobileDev #DevTips #FlutterCommunity
🔥 Узнай, как вынести управление анимацией за пределы Stateful Widget с InheritedWidget!

Привет, Flutter-энтузиасты! Нашёл для вас супер-полезное видео от Руслана Цицера, которое перевернёт ваше представление о работе с анимацией и стейт-менеджментом. Если вы хотите избавиться от "тормозов" в анимациях и научиться грамотно выносить логику — это must-watch! 🚀

В этом выпуске:
🎯 Продолжаем работу с TODO-листом — практика на реальном проекте!
🧠 Погружаемся в стейт-менеджмент — основы без сторонних библиотек.
🔄 Выносим управление Lottie-анимацией из Stateful Widget — избавляемся от тормозов.
⚡️ Используем InheritedWidget для передачи контроллера через контекст — элегантное решение!

Почему стоит посмотреть?
👉 Руслан наглядно показывает, как:
- Создать независимый виджет для анимации (TomatoAnimationWrapper)
- Передавать AnimationController через контекст
- Оптимизировать перерисовку с RepaintBoundary
- Избегать типичных ошибок при работе с InheritedWidget

Смотрите видео здесь:
Как пользоваться Inherited widget

👉 Обязательно подпишитесь на канал автора, если ещё не сделали этого! Его серия про архитектуру Flutter — настоящая золотая жила.

А у нас? Ловите новые лайфхаки и куча полезной инфы каждый день!
#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube
1
Определение платформы, на которой запущено приложение

Flutter потрясающий... работает на Android, iOS, Web, Windows, Linux, macOS.

При разработке кроссплатформенных приложений часто возникает необходимость определить, на какой платформе запущено приложение. Flutter предоставляет удобные инструменты для этого.

Пример кода:



import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

class PlatformUtils {
static bool get isDesktop => defaultTargetPlatform == TargetPlatform.windows ||
defaultTargetPlatform == TargetPlatform.linux ||
defaultTargetPlatform == TargetPlatform.macOS;

static bool get isMobile => defaultTargetPlatform == TargetPlatform.android ||
defaultTargetPlatform == TargetPlatform.iOS;

static bool get isWeb => kIsWeb;
}




Важно: Не импортируйте dart:io, если планируете использовать приложение на web, так как dart:io недоступен на web. Вместо этого используйте flutter/foundation.

Оцените новую рубрику по Flutter советам 🤔💡! Ваши отзывы помогут нам сделать контент еще лучше 👍. Все подобные новости можно найти по хэштегу #FlutterPulseTips.

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #CrossPlatform #CodingTips #DevTips
👍3👌2🔥1