Start Debugging

dart

122 статей · Страница1из13

shared_preferences или JSON-файл через path_provider для хранения настроек во Flutter

shared_preferences (SharedPreferencesWithCache) подходит для нескольких плоских флагов, а JSON-файл в getApplicationSupportDirectory подходит для структурированного объекта настроек. Разбираем атомарную запись, состояние гонки при параллельных сохранениях, ловушку с папкой Documents в Windows и Linux, поддержку веба и измеренную стоимость записи на Flutter 3.44.8.

Как вызывать OpenAI API из Flutter web-приложения, не раскрывая API-ключ

Всё, что вы компилируете в сборку Flutter web, включая значения --dart-define, попадает в браузер открытым текстом. Единственный безопасный вариант: небольшой backend-прокси, который хранит ключ, аутентифицирует пользователя, фиксирует модель и передаёт обратно SSE-поток Responses API. Полный прокси на Dart shelf и клиент Flutter, проверено на Flutter 3.44, Dart 3.12 и http 1.6.
2026-10-25 flutterdartios

Как заблокировать ориентацию экрана для одного экрана во Flutter (и почему многозадачность на iPad её игнорирует)

Как зафиксировать один маршрут Flutter в альбомной или портретной ориентации через SystemChrome.setPreferredOrientations, не ломая остальное приложение: блокировка на основе стека, которая переживает pushReplacement и восстанавливается при pop, почему пустой список не годится для сброса, почему многозадачность iPad и большие экраны Android 16 игнорируют блокировку и что означает UIRequiresFullScreen после iPadOS 26 и iOS 27 SDK. Проверено на Flutter 3.47.8 с Dart 3.13.7 и Xcode 27.1.

Как удалять элементы из List в Dart во время обхода без ConcurrentModificationError

Вызов remove внутри цикла for-in или forEach выбрасывает ConcurrentModificationError. Используйте removeWhere для фильтрации на месте, создайте новый список через where или collection-for либо обходите индексы в обратном порядке. Проверено на Dart 3.13.7, с бенчмарком, который показывает, почему removeAt в цикле работает медленно.
2026-10-25 dartflutterjson

Как сериализовать и десериализовать иерархию sealed-классов Dart в JSON и обратно

Поместите в JSON поле-дискриминатор, переключайтесь по нему в фабрике на sealed-базе и переключайтесь по подтипу, чтобы записать объект обратно. Три рабочие версии на Dart 3.13.7: ручное сопоставление с образцом, json_serializable 6.15.2 и Freezed 4.0.3 с unionKey и fallbackUnion, а также подводные камни каждой из них.
2026-10-24 dartflutterlints

Что такое линт depend_on_referenced_packages в Dart и почему он срабатывает на транзитивные импорты

depend_on_referenced_packages срабатывает, когда файл импортирует или экспортирует пакет, которого нет в вашем собственном pubspec.yaml, даже если он подтягивается через другую зависимость. Что именно проверяет это правило на Dart 3.12.2 и Flutter 3.44.8, почему транзитивные импорты это настоящая ошибка и как исправить каждый вариант.

Миграция Flutter-приложения с Color.withOpacity на Color.withValues (Flutter 3.27+)

Замените устаревшие Color.withOpacity, opacity, value, red, green, blue и alpha на withValues, .a/.r/.g/.b и toARGB32. Что dart fix перепишет за вас, четыре геттера, которые он оставляет, почему после замены ломаются точные проверки цветов и поиск в Map<Color, T> и как withOpacity молча теряет Display P3. Измерено на Flutter 3.44.8 с Dart 3.12.2.

Миграция Flutter-приложения с WidgetsBindingObserver.didChangeAppLifecycleState на AppLifecycleListener (Flutter 3.13+)

Замените самописный код жизненного цикла на WidgetsBindingObserver на AppLifecycleListener: соответствие колбэков, конечный автомат, который он навязывает, новое состояние hidden, ломающее исчерпывающие switch, запросы на выход на десктопе и тест, который внезапно падает на assert. Проверено на Flutter 3.44.8 и Dart 3.12.2.

Expanded или Flexible во Flutter: разбор FlexFit.tight и FlexFit.loose

Используйте Expanded, когда дочерний виджет должен занять свою долю Row или Column, и Flexible, когда он может быть меньше своей доли. Замеры раскладки на Flutter 3.44 показывают, куда уходит оставшееся место, почему неплотные дочерние виджеты не отдают его соседям и когда при неограниченных ограничениях работает только Flexible.

unawaited_futures и discarded_futures в Dart: какой линтер ловит какой вызов без await

unawaited_futures смотрит только внутрь async-тел, discarded_futures только внутрь синхронных, и оба пропускают стрелочные функции, tear-off и литералы коллекций. Разбор по случаям на Dart 3.12.2 и Flutter 3.44.8 и analysis_options.yaml, который я рекомендую.
Вперёд