どうも、たくチャレ(@takuchalle)です。

Flutterでリリース環境でエラーが発生した時に、強制的にアプリを終了する方法を紹介します。

Flutter のエラーハンドリング

まず、Flutterのエラーハンドリングについて解説します。

Flutterではエラーが発生した時にFlutterError.onErrorハンドラが呼ばれます。 デフォルトではFlutterError.dumpErrorToConsoleが割り当てられているので、IDE のコンソールにエラーが出力されます。 エラーの内容にもよりますが、アプリは画面が固まったり予期しないデータで動き続けてしまうことがあります。

リリース環境で予期しないデータで動き続けてデータベースを破壊などしたら目も当てられません。そこでアプリでエラーが発生した時に強制終了するのも一つの手かもしれません。

もちろん、致命的なエラーが起きないように例外などでちゃんとハンドリングすべきです。

FlutterError.onErrorを上書きすることで、エラー時の挙動をカスタマイズすることができます。

リリース環境で強制終了する方法

kReleaseMode定数でリリースモードかどうかを判別することができます。ちなみにデバッグモードはkDebugMode定数で判別できます。

exit関数でアプリを終了することができます。

これらを組み合わせると下記のようなコードになります。main関数でrunAppを呼ぶ前にFlutterError.onErrorを上書きしてしまいましょう。

void main() {
  FlutterError.onError = (FlutterErrorDetails details) {
    FlutterError.dumpErrorToConsole(details);
    if (kReleaseMode)
      exit(1);
  };
  runApp(MyApp());
}

以上、Flutterでリリース環境でエラーが発生した時に、強制的にアプリを終了する方法でした。

公式ドキュメント