Flutter Pulse
1.02K subscribers
638 photos
1 file
1.79K links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Async/await и Isolate в Flutter: не путайте ожидание с работой 🚀
Когда ваше приложение тормозит, первая мысль: «нужно вынести это в отдельный поток». В Flutter эта мысль часто выливается в async/await или Isolate. Но это не взаимозаменяемые вещи, а инструменты для разных задач 🤔. И если перепутать, можно получить либо бесполезный код, либо вечно зависающий UI 😱.

Главное заблуждение: async/await сам по себе не переносит выполнение в другой поток. Он просто дает удобный способ работать с асинхронными операциями, которые уже неблокирующие по своей природе: запросы к сети, чтение с диска, ожидание таймера 🕒.

Для операций ввода-вывода async/await достаточно 📁. Сеть, базы данных, файловая система - все это уже асинхронно на уровне платформы. Достаточно дождаться результата, и UI останется отзывчивым 📊.

Но как только появляются вычисления, которые грузят процессор - парсинг большого JSON, обработка изображений, сложные математические расчеты, - async/await перестает помогать 🤯. Здесь нужен настоящий параллелизм. Isolate запускает код в отдельном потоке (или даже ядре) и не трогает основной 💻.

Самый простой способ - compute(). Он берет функцию и данные, запускает их в изоляте и возвращает результат 📈. Идеально для разовых тяжелых задач.

Если нужно постоянное взаимодействие с фоновым процессом, например, обработка потока данных или долгая работа с промежуточными результатами - придется использовать Raw Isolate 📝. Там уже ручное управление портами и сообщениями, но зато полный контроль.

Итак, что выбрать?
🔵 Ждете ответ от сети или диска? async/await.
🔵 Нужно один раз обработать большой кусок данных? compute().
🔵 Есть долгий фоновый процесс с обменом сообщениями? Raw Isolate.
🔵 Пытаетесь ускорить вычисления, просто добавив async? Бесполезно, почитайте заново 📚.

Вывод: Async/await и Isolate не конкуренты, а партнеры 🤝. Первый отвечает за ожидание, второй - за параллельное выполнение. Смешивать их нужно осознанно, а не по принципу «чтоб не тормозило» 🚫.

Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #hardworkerFlutter #asyncawait #isolate #mobiledevelopment #programming
Flutter: Удаление условных операторов из дерева виджетов

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

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

🔹 Автор начинает с объяснения своей строгой позиции по отношению к разделению логики и отображения в коде Flutter-приложений.
🔹 Он показывает, как использовать виджет Visibility, чтобы контролировать видимость различных состояний приложения.
🔹 Также рассматривается альтернативный подход, при котором виджеты создаются внутри ViewModel.
Основные преимущества и недостатки каждого подхода подробно обсуждаются.

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

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programming #softwaredevelopment
👎4👍2
Получение местоположения на Wear OS с помощью Flutter и Native Android: полное руководство

Хотите получать данные о местоположении напрямую с часов Wear OS в вашем Flutter-приложении? В этой статье вы найдёте подробное руководство о том, как это сделать.

В статье рассматривается процесс получения местоположения на Wear OS с помощью Flutter и Native Android. Вы узнаете, как запрашивать разрешение на доступ к местоположению, как передавать данные о местоположении из Native Android в Flutter и как отображать эти данные в пользовательском интерфейсе. Кроме того, в статье рассматриваются вопросы оптимизации энергопотребления и производительности.

Основные темы, затронутые в статье:
👉 Запрос разрешения на доступ к местоположению на Wear OS с помощью MethodChannel
⚙️ Передача данных о местоположении из Native Android в Flutter с помощью EventChannel
📌 Отображение данных о местоположении в пользовательском интерфейсе Flutter
🔹 Оптимизация энергопотребления и производительности

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #wearos #flutterpulse #FlutterPulseMedium #mobiledevelopment #wearabletechnology
Flutter Урок 8: От Статического UI к Взаимодействию с Пользователем

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

В статье вы научитесь создавать приложения, которые могут принимать ввод от пользователя, реагировать на нажатия кнопок и обновлять интерфейс в реальном времени. Вы узнаете о виджетах ввода, таких как TextField, и о том, как использовать TextEditingController для чтения пользовательского ввода. Также вы поймёте, как работают кнопки в Flutter и как использовать setState для обновления интерфейса.

TextField: виджет для ввода текста пользователем
TextEditingController: контроллер для чтения и управления пользовательским вводом
ElevatedButton: кнопка для выполнения действий
setState: функция для обновления интерфейса

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

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programming #softwaredevelopment
👍1
Flutter Flavors: Как правильно настроить окружения для разработки, staging и production

Вы разрабатываете профессиональное Flutter-приложение и сталкиваетесь с необходимостью управления разными окружениями? Теперь вы можете легко переключаться между Dev, Staging и Production средами!

В этой статье вы узнаете, как настроить и управлять Flavors в Flutter, чтобы изолировать конфигурации, создать уникальные идентификаторы приложений и предотвратить случайное попадание dev-кода в production. Вы научитесь создавать разные конфигурации для Android и iOS, использовать переменные окружения и автоматизировать сборку с помощью CI/CD pipelines.

Основные концепции Flavors и их преимущества
⚙️ Пошаговая настройка Flavors для Dev, Staging и Production
🔹 Создание отдельных конфигурационных файлов для каждого окружения
👉 Использование разных иконок приложений для каждого Flavor
Лучшие практики по управлению Flavors и безопасностью приложения

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programming #softwaredevelopment
Эффект мерцания в Flutter: улучшение пользовательского опыта

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

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

Эффект мерцания — это анимированный плейсхолдер, имитирующий "мерцание" или "движущийся свет" над виджетами, пока фактические данные загружаются в фоновом режиме.
👉 Преимущества эффекта мерцания:
Улучшает пользовательский опыт
Делает экраны загрузки более быстрыми
Придает профессиональный и отполированный вид интерфейсу
Снижает разочарование пользователей во время вызовов API
Идеален для скелетных экранов

⚙️ Для реализации эффекта мерцания в Flutter существует популярный пакет shimmer. В статье показано, как добавить зависимость, обернуть виджет с Shimmer.fromColors и создать скелетный UI.

🔹 Основные шаги реализации:
👉 Шаг 1: Добавьте зависимость shimmer в pubspec.yaml
👉 Шаг 2: Оберните виджет с Shimmer.fromColors
👉 Пример скелетного UI с карточками и текстом

Лучшие практики использования эффекта мерцания:
🔹 Используйте мерцание только во время фактических состояний загрузки
🔹 Избегайте чрезмерных анимаций мерцания
🔹 Сохраняйте формы плейсхолдеров похожими на реальный контент
🔹 Используйте более легкие цвета для плавного UX
🔹 Используйте ListView.builder для длинных списков

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #ui #ux #shimmer #loadinganimation
👍2
Почему ваше Flutter-приложение перегревает телефоны

Вы когда-нибудь задумывались, почему пользователи удаляют ваше приложение, жалуясь на перегрев телефона? Всё дело в том, как вы пишете код для своего Flutter-приложения.

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

Основные причины перегрева:
👉 Чрезмерная перестройка виджетов
🔹 Использование анимаций без перерыва
⚙️ Неоптимальный сетевой слой
📌 Большие изображения и видео, перегружающие GPU
Фоновые задачи, которые никогда не останавливаются
🔹 Streams и listeners, вызывающие постоянные обновления
⚙️ Тестирование приложения в режиме отладки

Решения:
👉 Используйте умное управление состоянием и разбивайте UI на более мелкие виджеты
🔹 Останавливайте анимации, когда они не видны
⚙️ Оптимизируйте сетевой слой и используйте кэширование
📌 Сжимайте и изменяйте размер изображений
Переносите тяжелые вычисления в изоляты и используйте debouncing

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appperformance #optimization #programmingtips
👍1
Скрытый враг в вашем Flutter-приложении

Ваше приложение тормозит после нескольких часов работы или пользователи жалуются, что оно "тяжело" после долгих сессий? Это может быть признаком утечки памяти!

В этой статье вы найдёте практические советы и инструменты для обнаружения и исправления утечек памяти в Flutter-приложениях. Вы узнаете, как воспроизвести проблему, найти источник утечки и исправить её с помощью различных приёмов и инструментов, таких как Flutter DevTools.

Основные причины утечек памяти в Flutter:
🔹 Неотмененные подписки на потоки данных
🔹 Неосвобождённые контроллеры анимации и фокуса
🔹 Таймеры и Futures, которые не отменяются
🔹 Синглтоны и статические кэши, которые не очищаются
🔹 Изображения, которые не кэшируются или не освобождаются

⚙️ Как подойти к исправлению утечек памяти:
👉 Воспроизведите проблему и профилируйте приложение
👉 Используйте Flutter DevTools для анализа кучи и поиска источника утечки
👉 Исправьте утечку, отменив подписки, освободив контроллеры и т. д.
👉 Добавьте тесты для предотвращения будущих утечек

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам рубрика!

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #memoryleak #performance #devtools #mobiledevelopment #appoptimization
👍1
Flutter Apple Sign-In: Кроссплатформенный секрет, который увеличил загрузки приложения на 340%

Представьте, что всего за 30 дней количество загрузок вашего Flutter-приложения выросло с 2 000 до 8 800, а процент завершения регистрации увеличился с 31% до 84%! 🔥 Всё это стало возможным благодаря правильной реализации Apple Sign-In для iOS и Android в Flutter.

В этой статье вы узнаете, как реализовать кроссплатформенную аутентификацию Apple Sign-In в вашем Flutter-приложении, используя URL-схемы. Вы получите подробное руководство по настройке Apple Developer Portal, созданию бэкэнд-сервера и реализации аутентификации в Flutter. 🔹 Вы узнаете, как использовать пакет sign_in_with_apple для iOS, Android и веб-платформ. 🔹 Поймёте, как настроить бэкэнд-сервер для обработки аутентификации Apple. 🔹 Научитесь реализовывать кроссплатформенную аутентификацию в Flutter.

🇷🇺 Читать статью на русском:
Часть 1 Часть 2

🇬🇧 Read the article in English:
Part 1 → https://telegra.ph/Flutter-Apple-Sign-In-The-Cross-Platform-Secret-That-Increased-My-App-Downloads-by-340-Part-1-02-19
Part 2 → https://telegra.ph/Flutter-Apple-Sign-In-The-Cross-Platform-Secret-That-Increased-My-App-Downloads-by-340-Part-2-02-19

🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам эта рубрика?

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appauth #oauth2 #signinwithapple #crossplatform #iosdevelopment #androiddevelopment #flutterapp #mobileappdevelopment #dartprogramming #flutterui #appauthentication #flutertutorial
👍2
Flutter получил рабочее решение для жидкого стекла!

Жидкое стекло (Liquid Glass) было анонсировано в июне, и с тех пор сообщество Flutter с нетерпением ждало решения, которое принесет эту технологию в Flutter. И вот, оно появилось!

В статье рассматривается история вопроса, анализируются предыдущие попытки реализовать жидкое стекло во Flutter и представляются их недостатки.
Описывается новый пакет liquid_glass_easy, который добавляет интерактивные жидкие стеклянные линзы в режиме реального времени.
🔹 Пакет обеспечивает истинные визуальные эффекты жидкого стекла, реплицируя вид и физику реального стекла.
⚙️ Технология включает в себя рендеринг линз в реаль времени, настраиваемые формы и эффекты, а также поддержку контроллера для анимации.
👉 Разработчики могут легко добавить пакет в свой проект и использовать готовые примеры для создания жидкого стекла.

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напиши, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #liquidglass #glassmorphism #ui #ux #mobiledevelopment #crossplatform
Dart 3.4 Preview: Новые возможности для Flutter-разработчиков

В мире Dart произошло значительное обновление — вышла превью-версия Dart 3.4, которая принесла с собой множество улучшений и новых возможностей для разработчиков!

Основная часть нововведений направлена на улучшение читаемости, безопасности и выразительности кода. В статье рассматриваются такие важные темы, как деструктуризация записей, расширенные возможности сопоставления с образцом, sealed-классы, улучшенный вывод типов и типы расширений.

🔹 Деструктуризация записей теперь стала более мощной и позволяет работать с сложными структурами данных более безопасно и удобно.
Улучшенное сопоставление с образцом позволяет писать более чистый и поддерживаемый код, заменяя цепочки вложенных условных операторов.
📌 Sealed-классы обеспечивают гарантии полноты обработки случаев на этапе компиляции, что исключает целый класс ошибок времени выполнения.
⚙️ Улучшенный вывод типов означает меньше аннотаций типов, что делает код более читаемым.
👉 Типы расширений позволяют создавать новые типы без дополнительных затрат во время выполнения.

Эти нововведения делают Dart более привлекательным языком не только для Flutter-разработчиков, но и для разработчиков серверных приложений и CLI.

🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #programming #mobiledevelopment #softwaredevelopment
🔥1
Вызов нативного кода из Flutter: MethodChannel vs Flutter Native Bridge

Flutter упрощает создание красивых кроссплатформенных приложений, но реальные приложения часто требуют прямого доступа к нативным Android или iOS API. В этой статье вы узнаете, как вызывать нативный код из Flutter с помощью MethodChannel и Flutter Native Bridge.

В статье рассматриваются следующие темы:
Как Flutter вызывает нативный код с помощью MethodChannel
Почему MethodChannel может стать громоздким
Как Flutter Native Bridge предлагает более чистое альтернативное решение
Когда выбирать каждый подход в реальных приложениях

Вы узнаете о преимуществах и недостатках MethodChannel, а также о том, как Flutter Native Bridge упрощает вызов нативного кода без написания boilerplate-кода.

Ссылки:
🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, чтобы подписчики оценили рубрику.

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #nativecode #crossplatform #mobiledevelopment
Прямая Трансляция в Мобильных Приложениях: Решение с Минимальной Задержкой
📱💻

Вы когда-нибудь задумывались, как реализовать прямую трансляцию в мобильных приложениях с минимальной задержкой? 🤔 Автор статьи столкнулся с этой проблемой и поделился своим опытом в поисках решения. После изучения готовых библиотек для воспроизведения видео, он обнаружил, что они не обеспечивали необходимую задержку для live-трансляции. 📹

Автор статьи изучил, как работает трансляция на вебе, и обнаружил, что основной live-поток реализован через WebCodecs, API для работы с аудио- и видеокодеками напрямую в браузере. 🌐 Затем он приступил к изучению того, как реализовать трансляцию на мобильном клиенте, получив информацию о структуре чанков трансляции, которые приходят с бэкенда. 📊

Статья описывает проблему декодирования прямой трансляции видео в формате H.264, получаемой через WebSocket. Автор статьи рассматривает несколько пакетов для решения этой задачи, включая ffmpeg_kit_flutter_new, h264 и FlutterQuickVideoEncoder. Однако none из этих пакетов не подходит для декодирования прямой трансляции с минимальной задержкой. 🚫

Читать здесь: ссылка

 

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #videostreaming
👣 Keys во Flutter: как не потерять состояние при перестройке списков 📱💻

Один из самых частых источников багов во Flutter - потеря состояния при перестройке списков или перестановке элементов 🤦‍♂️. Кажется, все работает, но при добавлении новой карточки счетчик перескакивает на другую 📊. Или при изменении порядка чекбоксы остаются отмеченными не там 📝. Чаще всего проблема решается при помощи Keys 🔑.

Для чего используются Keys:

Flutter при обновлении экрана сравнивает старый и новый список виджетов и пытается понять, что изменилось 🤔. По умолчанию он ориентируется на тип виджета и его позицию в дереве 🌳. Это быстро, но приводит к ошибкам, когда элементы одного типа меняются местами или добавляются новые 🔄.

Keys дают Flutter дополнительную информацию: вместо «третий элемент в списке» он ищет «элемент с таким-то идентификатором» 📝. Благодаря этому состояние прикрепляется к конкретному объекту, а не к индексу 📈.

Типы ключей и когда их выбирать:

🔵 ValueKey - самый частый выбор 📈. Берет какое-то стабильное значение (id, уникальный заголовок) и использует его как идентификатор 📝. Идеально для списков, где у каждого элемента есть уникальный ключ из данных 📊.

🔵 ObjectKey - использует сам объект в качестве идентификатора, сравнивая его через стандартный оператор == 📊. Пригождается, когда у элемента нет уникального поля (например id), но сам объект достаточно стабилен и не меняется в процессе работы 🔄.

🔵 UniqueKey - каждый раз создает новый идентификатор 🔑. Это гарантирует, что Flutter не будет пытаться сопоставить виджет с предыдущим, а создаст новый элемент с нуля 📈. Удобно, когда нужно принудительно сбросить состояние (например пересоздать анимацию), но использовать на каждый чих не стоит - производительность пострадает 🚫.

🔵 GlobalKey - тяжелая артиллерия 🚀. Позволяет получить доступ к состоянию виджета из любой точки приложения 🌐. Нужен для сложных сценариев: работа с формами, программная навигация, тестирование 📝. Но каждый такой ключ хранится глобально и не очищается автоматически, поэтому их количество должно быть минимальным 📊.

Где без ключей не обойтись:

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

🔵 Виджеты, которые меняют порядок в зависимости от условий 📊.

🔵 Любые места, где важно сохранить состояние за конкретным экземпляром данных 📝.

Где ключи не нужны:

🔵 Статичные списки, которые не меняются 📝.

🔵 Виджеты без внутреннего состояния (статусные иконки, просто текст) 📄.

🔵 Случаи, где состояние вообще не важно 🤷‍♂️.

Чего делать не стоит:

Не надо оборачивать каждый виджет в Key просто потому, что так можно 🚫. Лишние ключи усложняют алгоритмы сравнения и могут замедлить рендеринг 🚀. Особенно это касается GlobalKey - его наличие в каждом втором виджете быстро приведет к утечкам и падению производительности 📉.

💡 Вывод:

Keys - это инструмент для точечного решения проблем с идентификацией виджетов 🔍. Если при перестройке интерфейса состояние прыгает или теряется - скорее всего, нужен ValueKey 📈. Если нужно сбросить внутреннее состояние - поможет UniqueKey 🔑. А если без доступа к виджету из другого места не обойтись - придется использовать GlobalKey 🚀. Во всех остальных случаях лучше обойтись без них 🙅‍♂️.

Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #hardworkerFlutter #mobiledevelopment #flutterwidgets
Обновление токенов авторизации в мобильных приложениях: опыт и подходы

📱 В современных мобильных приложениях авторизация пользователей является важнейшим аспектом, обеспечивающим безопасность и конфиденциальность данных. Однако, вместе с авторизацией возникает вопрос об обновлении токенов, которые со временем теряют свою актуальность. В этой статье мы поговорим об опыте и подходах к обновлению токенов авторизации в мобильных приложениях, в частности, используя Dio и JSON Web Token (JWT).

🔒 Авторизация на сервере и схемы авторизации запросов являются ключевыми моментами в обеспечении безопасности приложений. JWT-токен, состоящий из трех частей: заголовка, полезной нагрузки и секрета, играет важную роль в этом процессе. Но как обновлять эти токены, когда они истекают? Для большей безопасности часто используется система из двух токенов: Access Token и Refresh Token. Access Token обычно имеет ограниченный срок службы и используется для запросов, в то время как Refresh Token используется для обновления Access Token.

📝 В статье обсуждаются три варианта действий, когда токен протухает: разлогинивание пользователя, обновление токена после протухания и использование middleware или интерсептора для обновления токена и перезапроса данных. Также упоминается, что при использовании Dio можно создать собственный интерсептор для управления токенами и обновления их при необходимости.

Читать здесь: ссылка


FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #authorization
Оптимизация производительности приложений на Flutter 🚀
Производительность приложений на Flutter напрямую зависит от качества написанного кода. Лишние перестройки UI, тяжелые операции в основном потоке и неправильная работа со списками и изображениями могут привести к фризам, падению FPS и раздраженным пользователям 😤.

В этой статье мы обсудим наиболее распространенные ошибки, которые могут превратить быстрый фреймворк в тормознутое приложение.

Лишние перестройки UI: используйте ValueListenableBuilder или StreamBuilder, чтобы обновлять только нужную часть интерфейса.
Отсутствие const: добавляйте const к виджетам, где это возможно, чтобы уменьшить нагрузку на сборщик мусора и процессор.
Логика внутри build(): выносите логику в initState или бизнес-слой, чтобы избежать лишних операций.
ListView без builder: используйте ListView.builder, чтобы создавать элементы лениво и снижать нагрузку.
Отсутствие ключей: используйте ValueKey или ObjectKey, чтобы сопоставить старые и новые элементы при обновлении списка.

Полную новость читайте здесь.


FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #hardworkerFlutter #mobiledevelopment #optimization
📱 Отключаем запрос о соответствии экспортным требованиям в TestFlight 🚀
Вы устали каждый раз подтверждать соответствие экспортным требованиям при загрузке новой сборки iOS-приложения в TestFlight? 🤔
Если ваше приложение не использует шифрование, то можно легко избавиться от этого ручного подтверждения! 💻
Для этого нужно открыть файл Info.plist в папке /ios/Runner и добавить следующие строки:
<key>ITSAppUsesNonExemptEncryption</key>
<false/>

Что это дает:
🔵 Больше не нужно вручную отвечать «Нет» в App Store Connect.
🔵 Сборки сразу становятся доступными для тестирования в TestFlight после обработки.
Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #hardworkerFlutter #mobiledevelopment #iosdevelopment
😁1
Убираем хардкод и лишние перерисовки с помощью стандартных виджетов 🚀
В повседневной разработке часто встречаются задачи, которые можно решить красиво и без лишнего кода 🤔. Вместо того чтобы городить велосипеды, достаточно знать несколько встроенных инструментов Flutter 📚.

LayoutBuilder - адаптивный интерфейс без хардкода:
Проблема: нужно показывать разную верстку в зависимости от ширины экрана 📊. Многие начинают писать проверки через MediaQuery или пытаются угадать размеры устройства 🤷‍♂️. Но это неправильно - важно не само устройство, а реальное место, которое виджет занимает на экране 📈.

LayoutBuilder дает доступ к ограничениям родителя прямо во время построения 📊. Вы можете посмотреть максимальную ширину и решить, показывать горизонтальное меню или вертикальное, две колонки или одну 📈. Все адаптируется под текущий контейнер, а не под экран в целом 📊.


LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 600) {
return Row(children: [sidebar, content]);
}
return Column(children: [sidebar, content]);
},
)


AnimatedSwitcher - плавные переходы между виджетами:
Смена одного виджета на другой обычно выглядит резко ⚡️. Текст изменился - моргнул, иконка сменилась - тоже моргнула 🔄. AnimatedSwitcher добавляет анимацию при замене дочернего элемента 🎥. Старый виджет плавно исчезает, новый - появляется 🌟. Вы можете настроить тип перехода: затухание, сдвиг, масштаб 🎨.


AnimatedSwitcher(
duration: Duration(milliseconds: 300),
child: Text(counter.toString(), key: ValueKey(counter)),
)


Полную новость читайте здесь.

FlutterPulse — канал о мире Flutter!

#flutter #dart #FlutterPulse #FlutterPulseNews #hardworkerFlutter #mobiledevelopment #flutterwidgets
1
Разработка Flutter-приложения для изучения языков: опыт и уроки
📚💻

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

Одной из основных проблем при разработке такого приложения является не уровень Flutter, а момент, когда продуктовая логика перестаёт помещаться в учебные примеры. Например, как сохранить данные пользователя, если он зашёл анонимно, а затем решил зарегистрироваться? 📝 Или как обрабатывать ситуации, когда сеть на телефоне формально есть, но realtime-слой умер? 📊

Для решения этих проблем автор статьи использовал несколько подходов. Во-первых, он решил использовать отдельную модель аутентификации на стороне сервера, вместо того, чтобы полагаться на клиентскую часть. Это позволило ему иметь больше контроля над процессом аутентификации и авторизации. 🔒

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

В-третьих, автор перешёл от использования только HTTP-запросов к использованию комбинации HTTP и WebSocket для долгих серверных операций. Это позволило ему избежать проблем с таймаутами, нервным UX и другими проблемами, связанными с долгими запросами. 📈

Читать здесь: ссылка


FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #flutterapp
Революционный видеоредактор для мобильных устройств
Автор статьи, имеющий опыт монтажа видео более 20 лет, столкнулся с проблемой отсутствия подходящего видеоредактора для мобильных устройств 📱. Большинство приложений имели только одну дорожку, что было недостаточно для профессиональной работы 🎬. Автор решил создать свой собственный видеоредактор, который бы удовлетворял его потребностям 💡.

Автор начал с изучения существующих проектов на GitHub и собирал идеи для своего приложения 📊. Он пробовал использовать Apple Sprite Kit, но столкнулся с проблемами отзывчивости интерфейса и контроля над объектами 🤔. Затем он перешел на использование Dart Flutter, который позволил ему создать стабильное и кроссплатформенное приложение 📈.

Автор отмечает, что видеоредактор получился очень живым и отзывчивым, без лагов и проблем с производительностью 🚀. Он также подчеркивает, что для комфортной работы необходим хороший планшет или смартфон 📊. Автор рассказывает о процессе реализации различных функций, таких как фейды, энвелопер звука, эффекты с поддержкой кейфремов и другие 🎥. Он также упоминает, что добавил поддержку ИИ-асситента для монтажа промптами 🤖.

В целом, автор создал видеоредактор, который удовлетворяет его профессиональным потребностям и позволяет ему работать эффективно на мобильном устройстве 📊. В статье упоминается приложение Multitrack, которое позволяет использовать неограниченное количество треков 🎵. Оно доступно для устройств Android в Rustore и как приложение для macOS на сайте разработчика 📈. Также планируется выпуск версии для других платформ 🚀.

Читать здесь: ссылка


FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #flutterpulsehabr #mobiledevelopment #videoredactor