Лучшая практика сообщать об ошибках в Flutter - PullRequest
5 голосов
/ 06 марта 2020

Я пытаюсь использовать firebase_crashlytics lib с моим проектом Flutter, проблема в том, что Flutter никогда не падает, я могу генерировать исключения в коде, но все исключения в dart считаются не фатальными исключениями. О них обычно сообщается консоли, но я хотел, чтобы Flutter, нативные и необработанные исключения считались фатальными исключениями.

Я хотел одно из следующего:

  • Cra sh приложение, когда у меня возникла непредвиденная исключительная ситуация (закройте приложение с «не отвечает»)
  • Сообщить о фатальной исключительной ситуации в консоль Firebase
  • Обойти?

Мой код main.dart:

Future main() async {
  runZoned<Future<void>>(() async {
    await DotEnv().load('.env');
    setupNotifications();
    FlutterError.onError = Crashlytics.instance.recordFlutterError;
    runApp(MyApp());
  }, onError: Crashlytics.instance.recordError);
}

То, что я уже пытался сделать:

  • SystemChannels.platform.invokeMethod('SystemNavigator.pop'); Это работает, но не очень удобно для пользователя
  • Звоните * Функция 1041 *, которая пыталась взломать sh приложение через MethodChannel, не работала.

То, что я мог бы, вероятно, сделать:

  • Вызов toast чтобы уведомить пользователя о том, что что-то пошло не так
  • Показать всплывающее окно, уведомляющее пользователя о том, что что-то пошло не так и закрыть приложение
  • Просто закройте приложение
  • Попробуйте загрузить исходное состояние главного экрана приложения

1 Ответ

0 голосов
/ 10 марта 2020

Поведение, которое вы видите, является поведением по умолчанию для Crashlytics на Flutter, по крайней мере, на данный момент. Если вы хотите выйти из приложения, я могу порекомендовать вам следующие варианты:

  1. Перейдите к экрану ошибок, показывающему общее сообщение об ошибке c с использованием Navigator.pushAndRemoveUntil(). затем, когда пользователь нажимает OK или после таймера, вы выходите из приложения. Чтобы выйти из приложения, вы можете выбросить исключение на нативной стороне или использовать SystemChannels.platform.invokeMethod('SystemNavigator.pop');, хотя ваше приложение может быть заблокировано в App Store, так как Apple отклоняет программные выходы.

  2. Будьте осторожны, чтобы отображался экран с сообщением об ошибке, готовым к каждой возможной ошибке, чтобы пользователю не пришлось выходить из приложения.

...