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

如何修复“在此ProductItem小部件上方找不到正确的Provider <Product>”?

如何解决如何修复“在此ProductItem小部件上方找不到正确的Provider <Product>”?

我非常振奋。这是我第一次使用提供程序。我已经尝试过所有解决方案,但似乎无济于事。

在我正在开发的购物应用程序中,我尝试使用提供程序包将数据动态传递给我的小部件。

我正在共享非常大的错误消息的代码和屏幕截图。希望有人能帮忙

Gridview构建器

final productData = Provider.of<ProductsProvider>(context);
final products = productData.items;
return GridView.builder(
  padding: EdgeInsets.all(10),itemCount: products.length,itemBuilder: (context,index) => ChangeNotifierProvider.value(
      value: products[index],child: ProductItem()),gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
      crossAxisCount: 2,childAspectRatio: 0.75,crossAxisspacing: 10,mainAxisspacing: 10),);

网格中的单个产品项

final product = Provider.of<Product>(context);
return Container(
  child: GestureDetector(
    onTap: () {
      Navigator.of(context)
          .pushNamed(ProductDetails.routeName,arguments: product.id);
    },child: Card(
      color: Colors.white,elevation: 6,shape:
          RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
          //product image
          Image(image: Assetimage(product.imageUrl)),Padding(
            padding: EdgeInsets.symmetric(vertical: 0,horizontal: 10),//item name and fav button
            child: Flex(
              direction: Axis.horizontal,children: <Widget>[
                Expanded(
                    child: Text(
                  product.name,style: Theme.of(context)
                      .textTheme
                      .headline1
                      .copyWith(fontSize: 16,color: Colors.black),)),IconButton(
                    icon: Icon(
                      product.isFav
                          ? Icons.favorite
                          : Icons.favorite_border,color: Colors.red,),onpressed: () {
                      product.toggleFav();
                    })
              ],// price and buy button
          Padding(
            padding: EdgeInsets.symmetric(horizontal: 10,vertical: 0),child: Flex(
              direction: Axis.horizontal,children: <Widget>[
                Expanded(
                    child: Text(
                  "\$ " + product.price.toString(),style: Theme.of(context).textTheme.headline1.copyWith(
                      color: Theme.of(context).primaryColor,fontSize: 15),SizedBox(
                  width: 60,child: RaisedButton(
                    onpressed: () {},color: Colors.orange,child: Text(
                      "Buy",style: TextStyle(fontFamily: 'Prompt',fontSize: 14),)
              ],],);

screenshot of error

解决方法

您需要在主材料小部件中声明提供者。 Atm您正在使用它,但是您没有告诉flutter您将使用它。

https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple#changenotifierprovider

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