그는 상태 관리 구글이 개인적으로 두 가지 상태 관리를 개발 한 말을했다
Widget
첫 번째는 다음
provide
두 번째입니다
provider
.
이러한 차이는 그것이 업데이트 전체를 보이지 않았다 밖으로 일찍 두 가지입니다. 두 번째는 2019 버전은 지금 나온 것입니다
provider: ^3.2.0
. 의 숙박에
provide: ^1.0.2
, 기본적으로 GG. 하지만 가끔은 당신이 프로젝트를 위해해야 할 수도 있습니다
provide
. 그래서 지금 내가 말하고 싶은 것은이 두 가지 기본적인 사용법은, 또는 (국가 통제 여러 인터페이스의 두 사용 사이의 대조 점이다,이 프로젝트는 여러 인터페이스를 관리하는 이상의 상태가 될 수 있습니다.
이전에 문제가 나중에 공급자를 변경 발생 프로젝트 빌드 재건과 함께 제공합니다. 다시하지 않습니다 제공, 제공자는 재 빌드됩니다.
이 문제를 해결하려면, 당신은 듣고하지 않도록 선택할 수 있습니다
(가) 듣기
: 허위 또는 변화는 initstate 할 수 있습니다.
첫째, 만들
(1),을 만들provide,还用上次例子的counter
가져 오기 ' 패키지 : 플러터 / material.dart ' ; 클래스 ChangeNotifier와 카운터 { INT의 값 = 0 ; INCREMENT () { 값 ++ ; notifyListeners (); // 변경 알림 리스너 } }
(2),을 만들provider
수입 ' 패키지 : 플러터 / material.dart ' ; 클래스 ChangeNotifier와 카운터 { INT _count = 0 ; 얻을 수 => _count을; 보이드 증가분 () { _count ++ ; notifyListeners (); // 通知 } }
둘째, 최고 의존
1 제공
무효 메인 () { // 顶层依赖 var에 카운터 = 카운터 (); var에 제공 = 공급자 (); 제공자 .. (제공자 <카운터> .value (계수)); runApp (ProviderNode (아이 : MyApp를 (), 제공자 : 제공자)); }
2, 제공
보이드 의 main () { runApp ( MultiProvider ( 공급자 : ChangeNotifierProvider.value (값 : 카운터 ()) // ChangeNotifierProvider (빌더 (_) => 카운터 ()) , 아이 : MyApp를 () ) ) ; }
셋째, 사용
1 제공
Provide.value <카운터> (컨텍스트) .increment (); // 메소드 오프 증가량. . 여기에 당신은 또한 단순히 같은 두 개의 매개 변수를 받아들이는 증가 내부 카운터를 쓰기 계정으로 매개 변수를 전달할 수 있습니다
2, 제공
Provider.of <카운터> (컨텍스트는 듣고 : false로 ) .increment (); // 여기하는 것도 매개 변수를 전달할 수 있습니다
넷째, 값을 얻을
1 제공
반환 제공 <ZxxxDetailsProvide> ( 빌더 : (문맥, 아이, 발) { var에 goodsInfo = Provide.value <ZxxxDetailsProvide> (컨텍스트) .goodsInfo.data; } );
2, 제공
반환 소비자 <ZxxxListProvide> ( 빌더 : (문맥, 모델, 자녀) { ... } );
중요 : 사용하는 provider
특정 세트에주의를 기울에 우리가 가지고있는 시간을 BOOL 값을 듣고는있다
AWAIT Provider.of <DetailsInfoProvide> (문맥, 청취 : 거짓 ) .getGoodsInfo (goodsId);