[flutter] 비동기와 함께하는 BuildConext

popolarburr·2023년 10월 20일
0
post-thumbnail
  1. riverpod 어노테이션 및 프로바이더를 사용하면 AutoDisposeNotifier를 extends하여 사용하게 되는데 이 때, build함수를 반드시 AutoDisposeNotifier에서 override하여 사용해야한다.
    그러나 override하는 이 build함수에는 반드시 !! 동기적인 코드나 동기함수가 들어가야한다.
myMind.build' ('Future<bool> Function()') isn't a valid override of 'AutoDisposeNotifier.build' ('bool Function()'). (Documentation) 
The member being overridden (auto_dispose.dart:24).

대충 코드는 이러하다.

@riverpod으로 생성된 프로바이더 코드의 build함수에 Future로 리턴타입을 지정해줬는데, 위와 같은 오류가 나왔고, 찾아보니까 반드시 동기함수가 들어가야한다는 말이 있었다.

[10/21 수정]

제목 : 10/20 오답노트 -> [flutter] 비동기와 함께하는 BuildConext

카페에 와서 공부를 하다가 어쩌다보니 비슷한 상황을 다른 블로그에서 찾게 되어 가지고 오게 됨.

하단 출처의 docs를 읽어보면 아래와 같다 .

세부 사항
비동기 공백을 가로질러 BuildContext를 사용하지 마십시오.

나중에 사용하기 위해 BuildContext를 저장하면 쉽게 진단하기 어려운 충돌이 발생할 수 있습니다. 비동기 공백은 암묵적으로 BuildContext를 저장하는 것이며 코드를 작성할 때 > 간과하기 쉬운 일부입니다.

BuildContext를 사용할 때는 비동기 공백 후 마운트된 속성을 확인해야 합니다

정리를 해보면, buildContext를 비동기와 함께 사용하면 await 이후에 어디서 오류가 발생했는지 확인하기 힘들다고 하기 때문이다.

또한 이 글을 보면서 하나 확인한것은, 그냥 문법적인 오류인줄 알았지만, 플러터쪽에서 제시한 lint에 해당하는 것이다.

docs글 상단을 보면 Tools Linter > rules> > use_build_context_synchronously라고 카테고리를 나눈 것을 확인할 수 있다.

플러터 기초를 학습하고 공부할 줄만 알았지 , 잊고 지냈던 lint가 문득 떠올라서 이를 맞춰가고 커스텀하며 사용해야겠다는 것을 깨달았다.




[reference-blog] : https://th-biglight.tistory.com/30
[flutter docs] : https://dart.dev/tools/linter-rules/use_build_context_synchronously

profile
차곡차곡

0개의 댓글