runAppInZone static method

Future<void> runAppInZone(
  1. Future<void> body()
)

Оборачивает body в runZonedGuarded с отчётом в лог и NexoCrashReporter.

Первой строкой в body обычно вызывают WidgetsFlutterBinding.ensureInitialized, затем DI, install, и в конце — runApp.

Ошибки из самого body перехватываются и отчитываются (без повторного выброса), чтобы Future завершался; второй канал — необработанные ошибки в зоне.

Implementation

static Future<void> runAppInZone(Future<void> Function() body) async {
  await runZonedGuarded(
    () async {
      try {
        await body();
      } catch (e, s) {
        _report(e, s);
      }
    },
    (Object error, StackTrace stack) {
      _report(error, stack);
    },
  );
}