Provider(3)
-
Provider의 ChangeNotifier와 Dispose와 비동기 함수
Flutter를 사용해서 코드를 작성하는 도중, 다음과 같은 에러가 발생했다.{Provider} was used after being disposed. notifyListener()를 호출하는 비동기 함수를 실행한 뒤, 함수 실행이 완료되기 전에 다른 페이지로 이동했기 때문에, dispose()가 호출된 다음 notifyListener()가 호출되어 발생한 에러 문구다. State에는 mounted라는 상태값이 있어서 dispose()가 된 이후에는 setState()를 호출하지 않을 수 있었으나, Provider는 기본적으로 dispose()가 실행됐는지 확인할 방법을 알려주지 않는다. 비동기 함수를 다루다보면 쉽게 만날 수 있는 문제여서 그런지, 에러 문구를 구글링해보니 쉽게 대응 방법을 찾을 수..
2024.06.20 -
[Flutter] Provider로 비동기 통신을 하여 FutureBuilder를 대체하기
저번에 작성한 FutureBuilder에 대한 연장선에 있는 글이다. 비동기 처리에 익숙하다면 당연한 내용이기도 하다. 이번에는 FutureBuilder를 사용하여 비동기 처리를 했던 코드를, Provider로 분리하여 작성하는 방법에 대해 살펴보자. Provider를 사용하여 FutureBuilder를 대체하는 이유가 있을까? FutureBuilder를 사용해서 Widget의 초기 상태값을 결정할 때는 다음과 같은 문제점이 있다. FutureBuilder의 builder에서는 항상 비동기 처리에 대한 결과값으로, Widget을 반환해야 한다. 즉, 비동기 처리가 진행되는 동안 프로그레스 바를 띄운 뒤 다른 Widget으로 이동하려고 한다면, 렌더링과 관련해서 문제가 생긴다. 비동기 처리에 대한 로직이 ..
2021.03.25 -
Provider를 사용한 페이지간의 데이터 공유시, Error: Could not find the correct Provider<ProviderName> above this <WidgetName> Widget이 발생하는 원인과 해결법
깃허브의 샘플 코드 Provider의 특징 중 하나는 여러개의 화면에서 상태값을 공유할 수 있다는 것이다. 실제로 그런 예제를 많이 접해볼 수 있는데, 가장 흔한 예제는 다음과 같은 카운터 앱일 것이다. 첫 번째 화면에서 카운터를 조작(증감) 두 번째 화면에서 카운터를 조회 보통은 별다른 설명 없이 Navigator.push로 두 번째 화면을 띄우고, 두 번째 화면에서는 Context의 Provider를 불러와서 조작을 시도한다. 이 때 뎁스에 따라서 Error: Could not find the correct Provider above this[WidgetName]Widget와 같은 에러를 출력하게된다. 실제로 lib/problem/problem_main.dart와 lib/problem/problem_..
2020.11.01