我怎样才能只重建一个属性的特定部件,而不重建整个部件使用flutter_riverpod

zbsbpyhn  于 2023-04-07  发布在  Flutter
关注(0)|答案(2)|浏览(154)

我正在使用flutter_riverpod提供程序,我有Listview.builder,它包含return上的大部件。我将每个部件 Package 到Consumer中,以获得更好的performance,如下所示

ListView.builder(
itemCount: finalResultsForChat.length,
itemBuilder: (context, int index)  {
 return Column(
    children[
      Consumer(
      builder: (BuildContext context, WidgetRef ref, Widget? child) {
       String item1 = ref.watch(item1);
       return Widget1() ;
      }
     Consumer(
      builder: (BuildContext context, WidgetRef ref, Widget? child) {
       String item1 = ref.watch(item1);
       return Widget2() ;
      }
       Consumer(
      builder: (BuildContext context, WidgetRef ref, Widget? child) {
       String item1 = ref.watch(item1);
       return Widget2() ;
       // And many Consumer widgets .. etc
      }
     )
     )
     )
    ]
  );
}

现在,我有以下method,用于向listview.builder提供来自Firstore的所需数据

List finalResultsForChat = [];
Future getData()async{
FirebaseFirestore.instance.collection("users").doc(widget.negId).collection("chats1")
.get().then((data) {
  finalResultsForChat.addAll(data.docs);

  // after i add data so here i am refreshing every widget Consumer depending on which 
  //Consumer will hold the specific data and i am doing good here 
   ref.refresh(item1);
   .....etc
});

但我面临的挑战是,我还需要为finalResultsForChat重建listView.builder中包含的listView.builder列表。s itemcount和解决它,我也可以 Package listView.builderConsumer,但如果我这样做,它听起来很脏的方式给我,因为其他Consumers,我把它们添加到listView.builder's return将是没有意义的。.那么我怎么能只刷新itemcount而不刷新整个listView.builder
注意:我的所有工作都转换为StfulWidget
任何建议都是最受欢迎的家伙

a0zr77ik

a0zr77ik1#

如果finalResultsForChat更改,则必须重建listView.builder。但不是所有的小部件都将被重建。您是否检查了一个小部件子部件的构建方法中的打印?

return ListView(
      children: finalResultsForChat
          .map((chat) => Consumer(builder: (context, ref, _) {
                // String item1 = ref.watch(item1);
                return Container();
              }))
          .toList(),
    );
9rygscc1

9rygscc12#

我不知道你是否已经找到了解决问题的方法,但我认为你应该看看StatefulBuilder小部件,它允许你创建一个本地setState
https://api.flutter.dev/flutter/widgets/StatefulBuilder-class.html
https://www.youtube.com/watch?v=syvT63CosNE

相关问题