如何解决如何保存 FutureProvider 的数据以避免重建
我正在使用 FutureProvider
从 Laravel API
获取数据(地点)以在颤振中显示该数据。现在的问题是它一次又一次地重建,甚至服务器开始抛出 "too many attempts"
错误。我正在使用 ListView.builder
显示从 API 获取的所有位置,但是当我滚动到下一个位置然后滚动回上一个时,它会重建。意思是 FutureProvider
一次又一次地重建。这是附加的代码。我还尝试在 ListView 中添加 addAutomaticKeepAlives: true,
以保存状态
Container(
height: 100,child: ListView.builder(
addAutomaticKeepAlives: true,scrollDirection: Axis.horizontal,itemCount: places.length,itemBuilder: (_,index) {
return FutureProvider(
initialData: null,create: (context) =>
getFireIceCount(index,places),child: Consumer<List<dynamic>>(
builder: (context,fireIceCount,child) {
return (fireIceCount != null)
? (fireIceCount.isNotEmpty)
? PlacesImageViewer()
: Center(
child:
CircularProgressIndicator(
color:
Colors.cyan,),)
: Center(
child:
CircularProgressIndicator(
color: Colors.red,);
},);
},
解决方法
您需要一个有状态的小部件,因为与它关联的 State
对象在重建之间维护。第一个建议是从列表视图本身中提取您正在构建的小部件
class SampleItem extends StatefulWidget {
const SampleItem({Key? key}) : super(key: key);
@override
_SampleItemState createState() => _SampleItemState();
}
class _SampleItemState extends State<SampleItem> {
late final Future<List<dynamic>> items=getFireIceCount(index,places);
@override
Widget build(BuildContext context) {
return BuildYOurItemHere();
}
}
但最重要的是实际上向后端发出更少的请求,获取一系列项目而不是一个一个,并尝试实现分页 both in your 应用程序和服务器。这将减少您访问服务器的次数,并在减少请求的同时提高性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。