[英]How to listen to a specific variable in flutter riverpod?
我有一個“homeScreenViewController”提供者,它是一個 StateNotifierProvider。 它提供的狀態是一個具有多個變量的類。 我希望我的按鈕小部件僅在特定變量 'isLoadMoreLoading' 更改時重建。 但是當我每次更新任何變量時都使用如下時,我的按鈕會重建。 如何實現這一目標? 我正在使用 flutter_riverpod: ^1.0.0.dev6
Consumer(
builder: (context, ref, child) {
var _isLoadMoreLoading = ref.watch(homeScreenViewController).isLoadMoreLoading;
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () async {
if (!_isLoadMoreLoading) {
await ref
.read(homeScreenViewController.notifier)
.loadMorePokemons();
WidgetsBinding.instance!
.addPostFrameCallback((_) {
_scrollController.animateTo(
_scrollController.position.maxScrollExtent,
duration: Duration(milliseconds: 100),
curve: Curves.easeInOut);
});
}
},
child: _isLoadMoreLoading
? Container(
width: 50.0,
height: 1.0,
child: LinearProgressIndicator(
color: Colors.black,
minHeight: 1.0,
),
)
: Text('Load More Pokemon'),
),
],
)
],
);
},
),
隨着 1.0.0 版的發布,ref.watch 現在支持使用myProvider.select((value) => ...)
過濾重建
如果您使用過 flutter_bloc,我們可以說它相當於 Bloc 的buildWhen的riverpod 。
因此,在您的情況下,我們可以執行以下操作:
var _isLoadMoreLoading = ref.watch(homeScreenViewController.select((viewController) => viewController.isLoadMoreLoading));
這將允許消費者小部件僅在 isLoadMoreLoading 變量更新其值時重建。
可以在這里參考: https : //pub.dev/packages/riverpod/versions/1.0.0-dev.6/changelog
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.