如何解决当我在 Flutter 中使用 provider 包将数据从 API 加载到列表中时,它会重复调用 API,我该如何解决?
我正在尝试从检索地图的 api 调用中提取数据,我能够从 api 获取地图以显示我想要的方式,但是它反复调用 api 意味着列表不断刷新。即使我尝试将侦听器设置为 false,它也可以工作,但我必须手动刷新应用程序才能工作?
附加信息:分配和检索数据
import 'package:http/http.dart' as http;
class Stores with ChangeNotifier {
var s_length;
Future<List<Store>> getStores(String storeCatName) async {
final queryParameters = {
"store_category_name": storeCatName,};
try {
//Todo this is the issue - must fix.
final uri = Uri.http("url",'url',queryParameters);
//print(uri);
final response = await http.get(uri);
//print(response.statusCode);
//print(response.body);
if (response.statusCode == 200) {
final List<Store> stores = storeFromJson(response.body);
_stores = stores;
//print(_stores);
print("lenght: ${_stores.length}");
Store store;
for(store in _stores) {
store.products = Products().products(store.storeId);
}
//check if this is correct
notifyListeners();
//return stores;
} else {
print("error1");
return List<Store>();
}
} catch (e) {
print(e.toString());
return List<Store>();
}
//notifyListeners();
print(_stores);
}
List<Store> get favoriteItems {
//return _stores.where((storeItem) => storeItem.isFavorite).toList();
}
bool isNotFull(){
if (_stores.isEmpty){
return true;
} else {
return false;
}
}
int get numberOfStores{
return s_length;
}
List<Store> _stores = [];
List<Store> stores (String storeCatName){
getStores(storeCatName);
//print("cpp; + $s_length");
//notifyListeners();
return _stores;
}
}
final storesProvider = Provider.of<Stores>(
context,listen: false
);
storesProvider.getStores(categoryName);
final providerStoreList = storesProvider.stores(category.storeCategoryName);
附加信息:列表构建器:
child: ListView.builder(
itemCount: providerStoreList.length,itemBuilder: (context,index) => ChangeNotifierProvider.value(
value: providerStoreList[index],child: StoreItem(),)));
如果需要任何其他信息,请告诉我。任何帮助将不胜感激。
谢谢
解决方法
使用
听:假;
var ourClient = Provider.of<CartBlock>(context,listen: false);
,
将侦听器设置为 false 意味着在调用 notifyListeners() 时您的小部件不会再次构建。
所以,这可能不是问题。
我能想到的唯一原因是从build方法中再次调用API, 如果您使用的是 ListView 构建器,则可能会发生这种情况。 因此,每次滚动 ListView 时,您的 API 都会再次调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。