[英]Can Provider handle state of a complexed class such as this? If not, how can I make this class available to my entire app in its global state?
我想使用全局状态在整个应用程序中共享一个Currency对象(如下所示)(也许这不是最好的方法?)。
我尝试使用提供程序包,但似乎无法正常运行。
class Currency extends ChangeNotifier {
String baseCurrency = 'USD';
Map<String, double> rates = {};
List<String> currencList = [];
Future<Map<dynamic, dynamic>> getLatestCurrencyData() async {
NetworkHelper networkHelper = NetworkHelper('$url_fixer_io$api_key');
var currencyData = await networkHelper.getData();
return currencyData;
}
void populateRates() async {
Map<dynamic, dynamic> currencyData = await getLatestCurrencyData();
Map<String, dynamic> newRates = currencyData['rates'];
newRates.forEach((curr, rate) {
this.currencList.add(curr);
this.rates.putIfAbsent(curr, () => rate.toDouble());
});
notifyListeners();
}
Future<List<String>> getCurrencyList() async {
if (currencList.length == 0) {
await populateRates();
}
return currencList;
}
void changeBaseCurrency(String newCurrency) {
baseCurrency = newCurrency;
notifyListeners();
}
}
上面的实现给了我以下错误:
颤抖:引发了另一个异常:尝试使用具有可监听/流(货币)子类型的Provider。
我在响应式平台(例如,颤振)上管理状态的经验有限,非常感谢您提供有关如何实现此目的的任何提示!
班级的复杂程度无关紧要。 如果您的类扩展了ChangeNotifier,则应使用以下任一方法使您的类可用于树
ChangeNotifierProvider
要么
ListenableProvider
我的猜测是您使用的是Provider而不是这两者,如果与Listenable或Stream(ChangeNotifer为Listenable)一起使用,则有一个声明集将抛出此错误。这是Provider类的代码的一部分
assert((){
if (value is Listenable || value is Stream) {
throw FlutterError(''')
代替提供程序,使用ChangeNotifierProvider或ListenableProvider。 不同之处在于,当您在ListenableProvider中覆盖dispose方法时,ChangeNotifierProvider会自动调用dispose方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.