首页 > 解决方案 > 如何解决“找不到正确的提供者”在此 ProductItem 小部件“?

问题描述

我对颤动非常陌生。这是我第一次使用供应商。我已经通过了所有解决方案,但似乎没有任何帮助。

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

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

网格视图生成器

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),
                    ),
                  ),
                )
              ],
            ),
          ),
        ],
      ),
    ),
  ),
);

错误截图

标签: flutterflutter-dependenciesprovider

解决方案


您需要在主材质小部件中声明提供者。Atm 你正在使用它,但你还没有告诉 Flutter 你会使用它。

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


推荐阅读