flutter - 如何解决“找不到正确的提供者”在此 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),
),
),
)
],
),
),
],
),
),
),
);
解决方案
您需要在主材质小部件中声明提供者。Atm 你正在使用它,但你还没有告诉 Flutter 你会使用它。
https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple#changenotifierprovider
推荐阅读
- python - 使用 pypdf2 将元数据添加到 pdf
- pyspark - PySpark Groupby 和接收特定列
- c# - 在正在测试的方法中创建参数时,Nsubstitute 总是返回 null
- c++ - sizeof(enum) 可以不同于 sizeof(std::underlying_type
::类型)? - string - Bash 比较字符串
- python - 在 pyspark 中使用 spark-sftp jar
- javascript - 使用 JS 或 PHP 将 html 转换为 pdf 的最快方法是什么?
- html - 带溢出的离子标签
- android - Android - 通过 viewModels() 在 ViewModel 上使用可注入构造函数
- postman - 使用 Postman 在 Keycloak 中创建新用户