如何修复“在此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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...