Start Debugging

dart

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

2026-07-13 flutterdartasync

Как защитить setState проверкой mounted после асинхронного разрыва во Flutter

После await виджет может быть уже уничтожен, и вызов setState бросает исключение. Защитите возобновление через if (!mounted) return; и, что лучше, отмените работу, которая его запускает. Полный паттерн для Flutter 3.44.

Переход с Riverpod 2.x на Riverpod 3.0 во Flutter

Пошаговое обновление с flutter_riverpod 2.x до 3.x: поднимите версии пакетов, перенесите StateProvider и его собратьев в legacy-импорт, откажитесь от ref-типов AutoDispose и Family, обработайте оборачивание в ProviderException и автоматический повтор, а также исправьте фильтрацию уведомлений по ==, которая молча теряет события StreamProvider. Проверено на Flutter 3.44, Dart 3.x, flutter_riverpod 3.3.2.

go_router против auto_route против Navigator 2.0 во Flutter

go_router и auto_route оба работают поверх Navigator 2.0, поэтому реальный выбор -- это декларативная маршрутизация по URL против типизированных маршрутов на основе кодогенерации против ручной реализации Router API. Матрица решения с конфигурацией для каждого варианта и случаи, когда чистый Navigator всё ещё выигрывает.

shrinkWrap vs Expanded vs sliver-ы для длинных списков в Flutter: что выбрать?

Для длинного списка никогда не используйте shrinkWrap. Используйте Expanded, когда список является единственным прокручиваемым элементом, и sliver-ы (CustomScrollView), когда он делит прокрутку с другими секциями. Вот почему, с бенчмарком по числу build-ов.
2026-07-06 errorsflutterdart

Исправление: Riverpod 3.0 бросает ProviderException вместо исходной ошибки

Riverpod 3.0 оборачивает ошибки, брошенные при чтении провайдера, в ProviderException. Поймайте этот тип и прочитайте e.exception, чтобы получить исходную ошибку обратно, или используйте AsyncValue.error, который не обёрнут.
Назад Вперёд