微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 Changenotifier 类中创建 getter在 Flutter 中使用 Provider 时出错

如何解决无法在 Changenotifier 类中创建 getter在 Flutter 中使用 Provider 时出错

你好,我是供应商的新人。我在这里写了我遇到问题的步骤。 1- 在我的模型类中有数据之后,我调用了 api。 2-然后在 ChangeNotifer 类中,我想制作 Model 类对象中的列表的 getter。 我无法将模型类响应数据添加到这个 getter 变量中。

class CartProductNotifier with ChangeNotifier{

final _webServices = WebServices();
GetProductDetailsModel _getProductDetailsModel;
List<Vd> _vdList = [];

callApi(String handle) {
    return _webServices.getProductDetails(handle).then((value) {
      _getProductDetailsModel = value;
      _vdList = value.data.product.vd; // after api call done data is in _vdList
      return value;
    });
  }

}

现在我正在创建 getter

List<Vd> get vdata {
   return _vdList;
 }

但是当我从我的 ProductDetailsS​​creen 类中调用这个 getter 时,我得到的是空白数组或 null。

 Consumer<CartProductListNotifier>(
                  builder: (context,value,child) {
                    return Text(
                       value.vdata[index].quantitySelectedByUser.toString(),//data is not coming here
                    style: TextStyle(
                    fontSize: kFontSize16,fontWeight: kMediumFontWeight,color: Colors.black),);
                  },),

现在我无法更新消费者通知程序中的文本小部件中的值。

这是我的 main.dart

MultiProvider(
      providers: [
        ChangeNotifierProvider(
          create: (context) => CartProductListNotifier(),],child: MaterialApp(
        title: 'Application',debugShowCheckedModeBanner: false,

解决这个问题,或者告诉我另一种使用 Provider 使用 Model 类调用 Api 的好方法。 提前致谢。

解决方法

您的 ChangeNotifierProvider 看起来不错。您可以将 Type 明确指定为 ChangeNotifierProvider<CartProductListNotifier>,但如果您的 Consumer 小部件没有抛出错误,那么这似乎不是您的问题。

我注意到您没有在异步调用完成时通知您的消费者价值更新。添加 notifyListeners() 会更正:

callApi(String handle) {
    return _webServices.getProductDetails(handle).then((value) {
      _getProductDetailsModel = value;
      _vdList = value.data.product.vd;
      notifyListeners(); // ← if you want Consumer to rebuild when this call finishes
      return value;
    });
  }
,

调用 API 后调用 setData 函数解决了我的问题,现在我在 _vdList 中得到结果。

示例

setData(GetProductDetailsModel _productModel) {
   _getProductDetailsModel = _productModel;
   _vdList = _productModel.data.product.vd;
   _voList = _productModel.data.product.vo;
   notifyListeners();
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。