Flutter Riverpod context.read 대 빌드 메서드의 공급자
Oct 10 2020
Riverpod 문서에서 다음과 같이 말합니다.
그것이
context.read(myProvider)해결책입니다.이를 사용하여 이전 코드를 다음과 같이 리팩터링 할 수 있습니다.
@override Widget build(BuildContext context) { return RaisedButton( onPressed: () => context.read(counterProvider).state++, child: Text('increment'), ); }이렇게하면 버튼을 클릭해도 카운터가 증가합니다. 그러나 우리는 더 이상 공급자의 말을 듣지 않으므로 불필요한 재 구축을 피할 수 있습니다.
그러나 다음과 같이 말합니다.
주의
위젯
context.read의build메서드 내부에서 호출하지 마십시오 . 재 구축을 최적화하려면 대신 공급자에서 수신 한 값을 추출하십시오.
이것은 나에게 약간 혼란 스럽습니다. 먼저 문서는 메서드 context.read내부에서 사용하는 예제를 build제공 한 다음이를 방지하라는 경고를 제공합니다. 왜?
답변
3 Suragch Oct 10 2020 at 16:57
이 build메서드는 레이아웃 중에 여러 번 호출 될 수 있습니다. 따라서 내부에서 추가 작업을 수행하지 않아야합니다 (예 : 모델에서 메서드 호출).
그러나의 onPressed콜백은 RaisedButton실제로 호출 될 때 호출되지 않습니다 build. onPressed사용자가 버튼을 누를 때만 호출됩니다. 그래야만 Riverpod가 공급자를 읽고 모델에서 메서드를 호출합니다. 따라서 문서의 경고는 해당 상황에 적용되지 않습니다.