🏃♀️
【Flutter】runZonedGuardedを使って、複数の非同期処理のエラーハンドリングをする
runZonedGuardedとは
アプリ内でエラーが発生した際にエラーハンドリングを行うための関数です。
複数の非同期処理のエラーハンドリングをする
下記のコードは、3つの非同期処理をエラーハンドリングする処理です。
floatingActionButtonを押下すると、非同期処理が実行されます。
runZonedGuardedの第一引数は、エラーハンドリングされる処理です。
今回は、3つの非同期処理を実行しています。
また、runZonedGuardedの第二引数は、実際にエラーが発生した際に実行される処理です。
今回は、エラーのメッセージをターミナルに表示する処理を実行します。
main.dart
import 'dart:async';
import 'package:flutter/material.dart';
void main() {
runApp(const MyWidget());
}
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Container(),
floatingActionButton: FloatingActionButton(
onPressed: () async {
runZonedGuarded(
() {
Future.delayed(const Duration(seconds: 1), () {
debugPrint('1つ目のAPIを実行');
});
Future.delayed(const Duration(seconds: 1), () {
debugPrint('2つ目のAPIを実行');
throw Exception('2つ目のAPIでエラーが発生');
});
Future.delayed(const Duration(seconds: 1), () {
debugPrint('3つ目のAPIを実行');
});
},
(error, stack) {
debugPrint(error.toString());
},
);
},
),
),
);
}
}
上記のコードを実行してみると、ターミナルには下記の文が出力されます。
下記で分かることは、1つ目のAPIが実行されて、2つ目のAPIが実行されますが、2つ目のAPIでエラーが発生します。
Exceptionをthrowすることでエラーを検知し、runZonedGuardedの第二引数に記載されたエラーの際の処理が実行されました。
そうすることで、エラーのメッセージをターミナルで出力しています。
このように、runZonedGuardedは複数の処理をエラーハンドリングができます。
I/flutter (25085): 1つ目のAPIを実行
I/flutter (25085): 2つ目のAPIを実行
I/flutter (25085): Exception: 2つ目のAPIでエラーが発生
I/flutter (25085): 3つ目のAPIを実行
Discussion