我正在使用Riverpod监听对我的store 中选定商品的更改:
- 我有一个存储库
PlacesStore
,它有一个Stream<PlaceDetails?> watchPlace(PlaceId placeId)
方法. - 我把这个包在一个家庭供应商里,就像这样:
@riverpod Stream<PlaceDetails?> place(PlaceRef ref, InternalPlaceId placeId) { final store = ref.watch(placesStoreProvider); return store.watchPlace(placeId); }
- 我有一个单独的
StateProvider
,selectedPlaceIdProvider
,它使用用户在 map 上 Select 的地点的地点ID进行更新. - 我还有另一个Provider ,
selectedPlaceProvider
,它将两者结合成这样:@riverpod Stream<PlaceDetails?> selectedPlace(SelectedPlaceRef ref) { final placeId = ref.watch(selectedPlaceIdProvider); if (placeId != null) { return ref.watch(placeProvider(placeId).stream); } return const Stream.empty(); }
我之所以这样做,是因为我有许多小部件想知道用户 Select 了哪个地方,所以我认为将其放入包含当前所选地点详细信息的提供程序中是有意义的(同时仍然维护家庭提供程序,以便可以查找特别的地点).
然而,当我使用ref.watch(placeProvider(placeId).stream)
时,我被警告.stream
是不推荐使用的.我不太明白我要用什么来取代它.
上述模式是否有效?如果是这样的话,我应该用什么来替换.stream
,这样我仍然可以听到对我当前 Select 的位置的任何更改.