【发布时间】:2020-12-10 16:13:31
【问题描述】:
最近,我做了一个颤振课程。 讲师使来自 API 的获取请求变得如此困难。对于像 Flutter 这样的混合框架,我从没想过它这么难。
以下是我的代码。我正在使用provider 进行状态管理。
Future<void> fetchAndSetProducts() async {
try {
const url = 'fetch-url';
final response = await http.get(url);
final data = json.decode(response.body) as Map<String, dynamic>;
final List<Product> loadedProducts = [];
data.forEach((key, value) {
loadedProducts.add(Product(
id: key,
title: value['title'],
description: value['description'],
imageUrl: value['imageUrl'],
price: value['price'],
isFavorite: value['isFavorite'],
));
});
_items = loadedProducts;
notifyListeners();
} catch (error) {
throw (error);
}
}
在产品概览屏幕中,我正在显示产品页面,此方法的调用如下:
bool _isInit = true;
bool _isLoading = false;
@override
void didChangeDependencies() {
if (_isInit) {
setState(() {
_isLoading = true;
});
Provider.of<Products>(context).fetchAndSetProducts().then((_) => {
setState(() {
_isLoading = false;
})
});
}
_isInit = false;
super.didChangeDependencies();
}
另一种方法包括使用零持续时间的偷偷摸摸的方式,就像我们在 javascript set timeout 中使用的一样,给出零时间。
值得注意的是,在didChangeDependencies 中我们不能使用异步等待,所以很可能是回调地狱等待。
此外,还需要初始化一个变量,以便在加载时调用一次 api。
没有简单的解决方案吗?还是一种行业处理方式?
【问题讨论】:
-
这是一个 100 万美元的问题......我在 3 个月前处于同样的情况并离开了 github.com/GIfatahTH/states_rebuilder 的提供者
-
这有什么好处吗?我的意思是我不想学习世界上所有的状态管理库
-
有超过 20 个状态管理库。一个噩梦。我只是坚持来自同一个问题。看看这个它是如何处理状态的github.com/GIfatahTH/states_rebuilder/wiki/…