Flutter
Корневые обработчики и владение
Обработчики Flutter Framework и платформы без скрытой замены другого владельца и повторной отправки ошибок.
Корневые обработчики и владение
FlutterError.onError получает перехваченные Flutter ошибки построения, компоновки, отрисовки, обратных вызовов и явных вызовов FlutterError.reportError. PlatformDispatcher.onError получает необработанные ошибки корневого Isolate вне обработчиков Framework, если их не перехватила ближайшая Zone.
FlutterErrorManagerBinding подключает оба пути:
final FlutterErrorManagerBinding binding =
FlutterErrorManagerBinding(manager: manager)..attach();
Правила владения:
- повторный
attachтой же привязки идемпотентен; - вторая активная привязка вызывает
StateError; detachвосстанавливает обработчики, сохранённые во времяattach;- обработчик, позже установленный другим владельцем, не перезаписывается;
- для ошибок дочернего Isolate нужен
IsolateErrorManagerBinding.
FlutterPreviousErrorHandlerPolicy.preserve вызывает предыдущий обработчик после передачи ошибки менеджеру и сохраняет обычный диагностический вывод Flutter. Выбирайте replace, только если прежнее поведение намеренно перенесено в другое место.
Не сохраняйте второй удалённый ErrorReporter сбоев без правил дедупликации.