Flutter报错:无法通过静态访问调用实例成员isFavorite
解决Flutter中isFavorite静态访问实例成员的错误
问题代码
import 'package:flutter/material.dart'; import 'package:my_shop/providers/product.dart'; import 'package:my_shop/screens/product_detail_screen.dart'; import 'package:provider/provider.dart'; class ProductItem extends StatelessWidget { this.title, this.imageUrl, {super.key}); @override Widget build(BuildContext context) { final product = Provider.of<Product>(context); return ClipRRect( borderRadius: BorderRadius.circular(10), child: GridTile( footer: GridTileBar( title: Text( product.title, textAlign: TextAlign.center, textScaler: const TextScaler.linear(2 / 3), ), backgroundColor: Colors.black87, leading: IconButton( icon: Icon( Product.isFavorite ? Icons.favorite : Icons.favorite_border), color: Theme.of(context).colorScheme.secondary, onPressed: () { product.toggleFavoritestatus(); }, ), trailing: IconButton( icon: const Icon(Icons.shopping_cart), color: Theme.of(context).colorScheme.secondary, onPressed: () {}, )), child: GestureDetector( onTap: () { Navigator.of(context).pushNamed( ProductDetailScreen.routeName, arguments: product.id, ); }, child: Image.network( product.imageUrl, fit: BoxFit.cover, ), ), ), ); } }
报错信息
Instance member 'isFavorite' can't be accessed using static access.dartstatic_access_to_instance_member bool isFavorite,类型为InvalidType,路径为package:my_shop/providers/product.dart
解决方案
错误核心是用类名Product访问了实例成员isFavorite——isFavorite是Product类的实例属性,必须通过实例对象调用。
- 修改Icon的判断逻辑:
将代码中的:
Product.isFavorite ? Icons.favorite : Icons.favorite_border
替换为:
product.isFavorite ? Icons.favorite : Icons.favorite_border
这里的product是你通过Provider.of<Product>(context)获取的实例对象,用它访问isFavorite符合语法规则。
- 确认
Product类定义(确保isFavorite是实例属性):
检查package:my_shop/providers/product.dart中的Product类,确保isFavorite没有添加static关键字,示例如下:
class Product { final String id; final String title; final String imageUrl; bool isFavorite; // 实例属性,无static修饰 Product({ required this.id, required this.title, required this.imageUrl, this.isFavorite = false, }); void toggleFavoritestatus() { isFavorite = !isFavorite; } }
内容的提问来源于stack exchange,提问作者Tooraj rezaei
相关产品推荐
相关产品推荐

