Flutter에서 Provider.of <X>와 Consumer <X>를 사용하는 경우


13

나는 여전히 플러터 상태의 상태 관리 기술에 대해 머리를 감고 있으며 Provider.of<X>vs. 를 언제, 왜 사용 해야하는지 약간 혼란 스럽습니다 Consumer<X>. 나는 이 두 가지 중에서 선택할 때 Provider.of를 사용하여 데이터에 액세스하려고하지만 UI를 변경할 필요가 없다는 것을 문서 에서 이해 합니다. 따라서 (문서에서 가져온) 다음은 데이터에 액세스하고 새 이벤트에서 UI를 업데이트합니다.

return HumongousWidget(
  // ...
  child: AnotherMonstrousWidget(// <- This widget will rebuild on new data events
    // ...
    child: Consumer<CartModel>(
      builder: (context, cart, child) {
        return Text('Total price: ${cart.totalPrice}');
      },
    ),
  ),
);

UI를 사용하여 데이터를 다시 작성하지 않으려는 경우 다음 Provider.of<X>과 같이 listen매개 변수를로 설정하여 사용 false합니다.

Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild

그러나 listen필요하지 않으므로 다음도 실행됩니다.

Provider.of<CartModel>(context).add(item); \\listener optional

따라서 몇 가지 질문이 있습니다.

  1. 이것은 올바른 구별하는 방법 Provider.of<X>Consumer<X>. 이전은 UI를 업데이트하지 않고 후자는 업데이트합니까?
  2. listen설정되어 있지 않으면 false위젯이 기본적으로 재 구축되거나 재 구축되지 않습니까? 어떤 경우 listen로 설정 true?
  3. Provider.of우리가 UI를 다시 빌드 할 수있는 옵션이 Consumer있습니까?

답변:


17

중요하지 않습니다. 그러나 일을 빠르게 설명하려면 :

Provider.of는 IS 만을 얻고 객체에 듣는 방법. Consumer, Selector및 모든 * ProxyProvider 호출 Provider.of이 작동합니다.

Provider.ofvs Consumer는 개인적인 취향의 문제입니다. 그러나 둘 다에 대한 몇 가지 주장이 있습니다.

Provider.of

  • 클릭 핸들러를 포함한 모든 위젯 라이프 사이클에서 호출 할 수 있습니다. didChangeDependencies
  • 들여 쓰기를 증가시키지 않습니다

소비자

  • 보다 세분화 된 위젯 재 구축 가능
  • 대부분의 BuildContext 오용 해결

도움이됩니다. 나는 특히 다른 사람들을 위해이 답변을 받아 들일 것입니다. 그러나이 문장에 대한 참조를 가리킬 수 있습니다. "Provider.of는 객체를 얻고 듣는 유일한 방법입니다. Consumer, Selector 및 모든 * ProxyProvider는 Provider.of를 호출하여 작동합니다." 이것은 내가 문서에서 본 것이 아니며 실제로 도움이되었습니다!
Oprimus

2
이것은 Consumer / ... 작동 방식의 구현 세부 사항입니다. 여기 소스가 있습니다. 당신은 볼 수 Consumer기본적으로 아무것도하지만, Provider.of새로운 위젯
레미 Rousselet

BuildContext 오용을 방지하기위한 학습에 대한 자료가 있습니까?
吳 強 福
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.