【问题标题】:Unable to create getter in Changenotifier class. error when using Provider in Flutter无法在 Changenotifier 类中创建 getter。在 Flutter 中使用 Provider 时出错
【发布时间】:2021-07-20 18:54:19
【问题描述】:

你好,我是新的供应商。我在这里写了我有问题的步骤。 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,

请解决这个问题或告诉我另一种使用模型类和提供者调用 Api 的好方法。 提前致谢。

【问题讨论】:

  • 我们需要查看你在哪里实例化了 Provider(通常是 ChangeNotifierProvider,通常在 main.dart 中完成)并检查你是否在正确的地方用正确的孩子。这些链接可能会对您有所帮助:stackoverflow.com/a/66486075/2301224stackoverflow.com/a/66486075/2301224
  • 我编辑了问题。但我的问题是,当调用 cousumer 时,getter 会返回 getter 中的空数组,没有数据我如何在 getter 中初始化数据。
  • 作为一个测试,您能否从您的CartProductNotifier 中检索您的Consumer 中的硬编码数据?
  • 实际上我没有尝试使用列表类型对象进行硬编码。但我确信硬编码数据会出现。我试过String,int类型,它会来
  • 问题是我无法将来自 API 的数据传递给 getter。

标签: flutter dart flutter-dependencies provider flutter-change-notifier


【解决方案1】:

您的ChangeNotifierProvider 看起来不错。您可以将 Type 显式指定为 ChangeNotifierProvider&lt;CartProductListNotifier&gt;,但如果您的 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;
    });
  }

【讨论】:

    【解决方案2】:

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

    例子

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

    【讨论】:

      猜你喜欢
      • 2020-11-03
      • 1970-01-01
      • 2020-02-29
      • 2021-01-29
      • 2020-12-17
      • 2023-03-07
      • 2020-10-12
      • 2020-05-31
      • 1970-01-01
      相关资源
      最近更新 更多