flutter - Listview Builder 导致 Flutter 中重新加载消费者
问题描述
我在 Consumer 中使用 Listview,当我向下滚动时,它会重新加载 Consumer 提供程序。
这是我的完整代码。
class UnitScreen extends StatefulWidget {
@override
_UnitScreenState createState() => _UnitScreenState();
}
class _UnitScreenState extends State<UnitScreen> {
Future<void> _getUnits(BuildContext context) async {
return Provider.of<UnitProvider>(context, listen: false).getUnits();
}
Widget _buildUnits(List<Unit> units) {
return ListView.builder(
itemCount: units.length,
itemBuilder: (BuildContext ctx, index) => DisplayItem(
title: units[index].name,
id: units[index].id
),
);
}
@override
void initState() {
Future.delayed(Duration.zero, () {
_getUnits(context);
});
super.initState();
}
@override
Widget build(BuildContext context) {
print('inside build');
return Scaffold(
appBar: SearchableAppBar(
title: "Unit"
),
drawer: AppDrawer(),
body: RefreshIndicator(
onRefresh: () => _getUnits(context),
child: Consumer<UnitProvider>(builder: (ctx, snapshot, child) {
print('inside consumer');
switch (snapshot.unitList.status) {
case Status.LOADING:
return Center(child: CircularProgressIndicator());
break;
case Status.COMPLETED:
return _buildUnits(snapshot.unitList.data);
break;
default:
return ErrorWithRetry();
}
}));
}
}
加载单元后,当我向下滚动时,它会重新加载消费者,如您所见,我在消费者内部调用了 print 方法,我可以在调试控制台中多次看到消费者内部。
我是新手,所以这是默认行为还是我在这里做错了什么?
解决方案
我认为这样做更好(将实例添加到您的类并直接从您的类中调用方法):
Widget build(BuildContext context) {
return ChangeNotifierProvider<UnitProvider>(
create: (context) => UnitProvider.instance(),
child: Scaffold(
appBar: SearchableAppBar(
title: "Unit"
),
drawer: AppDrawer(),
body: Consumer<UnitProvider>(builder: (context, snapshot, child) {
return RefreshIndicator(
onRefresh: () => snapshot.getUnits(context),
child:
推荐阅读
- android - 尝试运行 Reactive Native 时出错:在 VSC 中的设备上运行 Android
- reactjs - CKEditor5 反应和 ClassicEditor 的自定义构建不再工作
- python - 密集层二分类不能设置为2
- sql - 如何在 Oracle SQL 中过滤掉某些日期
- python - Keras:ArgMax 预测
- r - poly 有反函数吗?
- haskell - 具有相同名称的字段的 2 个不同记录的奇怪类型错误
- python - 时间序列多索引数据帧的重采样
- text - ggplotly hoveron = "fills" 导致工具提示在 geom_sf 地图中重复
- tensorflow - 如何对三元组损失的嵌入进行 L2 归一化?