showModalBottomSheet에서 Consumer 사용시 Parent 위젯의 Provider 발견 못하는 오류

하스레·2022년 9월 16일

오류 설명

Parent위젯에서 showModalBottomSheet을 사용하여 모달 위젯을 리턴했는데, 어떤 짓을 해도 모달위젯에서 Parent위젯에서 생성한 Provider을 찾지 못하는 오류가 발생했다.

Error: Could not find the correct Provider<...> above this Consumer<...> Widget

오류 원인

어제부터 서치하다 드디어 이유를 찾았다 ㅜㅜㅜ 프로바이더는 알다시피 위젯 트리에서 조상의 것을 consume할 수 있는데,
showDialog와 비슷한 종류의 함수시, 해당 dialog는 다른 위젯트리에 위치하게 되어 Parent 위젯의 provider를 찾을 수 없었던 것이다...ㅠㅠ (참고: 스택오버플로우 감사합니다...)

오류 해결

다음과 같이 새로운 위젯트리에 원하는 프로바이더를 넣어주었다.

_showConfirmModal(BuildContext? context) {
    final viewModel = Provider.of<ViewModel>(context!, listen: false);
    
    showModalBottomSheet(
      context: context,
      builder: (context) {
        return ChangeNotifierProvider.value(value: viewModel, child: ConfirmModal());
      },
    );
  }
profile
Software Developer

0개의 댓글