You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类的实例属性,必须通过实例对象调用。

  1. 修改Icon的判断逻辑:
    将代码中的:
Product.isFavorite ? Icons.favorite : Icons.favorite_border

替换为:

product.isFavorite ? Icons.favorite : Icons.favorite_border

这里的product是你通过Provider.of<Product>(context)获取的实例对象,用它访问isFavorite符合语法规则。

  1. 确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:25:08