簡體   English   中英

如何在flutter riverpod中收聽特定變量?

[英]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 的buildWhenriverpod

因此,在您的情況下,我們可以執行以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM