Flutter rethrow

이건선·2023년 7월 15일
0

Flutter

목록 보기
11/30

rethrow

'rethrow'는 현재의 예외를 다시 던지는 키워드입니다. 예외 처리 블록에서 예외를 잡아내지만, 그 예외를 다른 곳에서도 처리해야 할 경우에 사용됩니다.

// app_provider.dart
...

  try {
    if (searchTerm == 'fail') {
      throw 'Something went wrong';
    }

    _state = AppState.success;
    notifyListeners();
  } catch (e) {
    _state = AppState.error;
    notifyListeners();
  }
  
...

위의 예제에서 fail일때 throw 에러를 내보낸다고 가정해봅시다.

searchTerm가 fail일 때 throw에러를 발생시키지만 catch할 에러가 없기 때문에 다른곳에서 에러처리가 되어야 할 main.dart 파일의 코드는 에러를 catch하지 못하고 try구문의 Navigator.push를 실행시킵니다.

// main.dart

...

    try {
     await context.read<AppProvider>().getResult(searchTerm!);
     Navigator.push(context, MaterialPageRoute(builder: (context) {
       return SuccessPage();
     }));
   } catch (e) {
     showDialog(
         context: context,
         builder: (context) {
           return AlertDialog(content: Text('Something went wrong'));
         });
   }
   
...

때문에 main.dart에서 에러를 catch 할 수 있도록 throw한 에러를 rethrow해서 main.dart에서 에러를 catch할 수 있도록 해줍니다.

// app_provider.dart 코드 수정
...

 try {
   if (searchTerm == 'fail') {
     throw 'Something went wrong';
   }

   _state = AppState.success;
   notifyListeners();
 } catch (e) {
   _state = AppState.error;
   notifyListeners();
   rethrow // 코드 수정
 }
 
...
profile
멋지게 기록하자

0개의 댓글