Start Debugging

flutter

162 статей · Страница2из17

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

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

Исправление: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is X, expected version is Y (Flutter Android)

Зависимость собрана с версией Kotlin, которая как минимум на две минорные версии новее компилятора вашей сборки. Поднимите версию org.jetbrains.kotlin.android в settings.gradle.kts до X минус один или выше либо закрепите зависимость на старой версии.

Исправление: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10) при Google Sign-In во Flutter

ApiException: 10 означает DEVELOPER_ERROR: Google не узнаёт пару из имени пакета и SHA-1 сертификата подписи установленного APK. Зарегистрируйте SHA-1 ключа, которым действительно подписана сборка, и передайте Web client ID как serverClientId.
2026-10-19 flutterdarttheming

Как определить собственные дизайн-токены через ThemeExtension и анимировать их при переключении между светлой и тёмной темой во Flutter

Унаследуйте класс от ThemeExtension, зарегистрируйте по одному экземпляру в каждом ThemeData через список extensions, читайте его через Theme.of(context).extension<T>() и напишите настоящий lerp, чтобы AnimatedTheme в MaterialApp интерполировал ваши токены при переключении светлой и тёмной темы. Разобраны цвета, радиусы, тени, текстовые стили и булевы значения, падение при отсутствующем расширении, ловушка copyWith, которая отбрасывает все остальные расширения, и причина, по которой нужны == и hashCode. Всё проверено виджет-тестами на Flutter 3.44.8.

Как заставить AnimatedSwitcher анимировать смену, если тип дочернего виджета не меняется во Flutter

AnimatedSwitcher запускает переход только тогда, когда Widget.canUpdate считает новый дочерний виджет другим, поэтому Text на Text без ключа просто обновляется на месте. Здесь описано исправление в одну строку, где именно должен стоять ключ, почему UniqueKey - ловушка, ошибка направления сдвига из-за статического transitionBuilder и скачок раскладки из-за Stack по умолчанию. Всё проверено виджет-тестами на Flutter 3.44.8.
2026-10-19 flutterdartandroid

Как восстановить состояние UI после остановки процесса Android во Flutter с помощью RestorationMixin

Android завершает фоновые приложения Flutter, чтобы освободить память, и когда пользователь возвращается, каждый StatefulWidget начинает с нуля. Здесь показано, как включить восстановление через restorationScopeId, RestorationMixin и свойства Restorable, восстановить текстовые поля, позиции прокрутки и открытые маршруты, написать собственный RestorableValue и протестировать всё это с помощью restartAndRestore и adb. Проверено на Flutter 3.44.8 и эмуляторе Android 16.

Как перехватывать необработанные асинхронные ошибки во Flutter с помощью runZonedGuarded и PlatformDispatcher.instance.onError

FlutterError.onError видит только ошибки, возникшие внутри колбэков фреймворка. Future без await, таймеры, потоки и код после await попадают в другое место. Здесь показано, какой обработчик какую ошибку ловит (замеры на Flutter 3.44.8), и настройка main(), которая перехватывает их все, в том числе в вебе.
2026-10-18 dartflutterstreams

Как повторять последнее значение для поздних подписчиков потока Dart без BehaviorSubject из rxdart

Broadcast StreamController теряет все события, произошедшие до подписки. Вот замена BehaviorSubject без зависимостей на основе Stream.multi, расширение replayLatest() для уже существующих потоков, ускоренный вариант на async*, который молча теряет события, и нюанс с initialData у StreamBuilder. Всё проверено на Dart 3.12.2.

Миграция локального хранилища Flutter-приложения с Hive на Drift (hive_ce 2.22 на drift 2.35)

Однократный и устойчивый к сбоям импорт существующих боксов Hive в базу SQLite drift на устройстве пользователя: проектирование схемы, функция импорта, идемпотентность, удаление боксов и два подводных камня, которые незаметно портят данные (точность DateTime и конфликты имён классов). Проверено на Flutter 3.44.8 с hive_ce 2.22.0 и drift 2.35.2.
Назад Вперёд