我正在使用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.builder
到Consumer
,但如果我这样做,它听起来很脏的方式给我,因为其他Consumers
,我把它们添加到listView.builder's return
将是没有意义的。.那么我怎么能只刷新itemcount
而不刷新整个listView.builder
呢
注意:我的所有工作都转换为StfulWidget
任何建议都是最受欢迎的家伙
2条答案
按热度按时间a0zr77ik1#
如果finalResultsForChat更改,则必须重建listView.builder。但不是所有的小部件都将被重建。您是否检查了一个小部件子部件的构建方法中的打印?
9rygscc12#
我不知道你是否已经找到了解决问题的方法,但我认为你应该看看StatefulBuilder小部件,它允许你创建一个本地setState。
https://api.flutter.dev/flutter/widgets/StatefulBuilder-class.html
https://www.youtube.com/watch?v=syvT63CosNE