떨림 상태 관리 및 사용의 제공자가 차이점

그는 상태 관리 구글이 개인적으로 두 가지 상태 관리를 개발 한 말을했다 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);

 

추천

출처www.cnblogs.com/joe235/p/11971945.html