繁体   English   中英

Provider可以处理诸如此类的复杂类的状态吗? 如果没有,如何使此类在全局状态下可用于我的整个应用程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM