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

遇到Instance member 'items' can't be accessed using static access报错如何解决?

问题解决与原理说明

报错原因

你当前的写法属于用类名直接访问实例成员:代码中定义的items没有加static修饰,属于Dashboard类的实例成员,但你调用时用了Dashboard.items的静态访问方式,触发了Dart的语法校验报错。

快速修复方案

两种方案选其一即可,根据你的业务场景判断:

  • 方案1:将items改为静态成员(适合所有Dashboard实例共用同一份日期列表的场景)
    在items的定义代码前添加static关键字:
    static final items = List<DateTime>.generate(60, (i) =>
          DateTime.utc(
            DateTime.now().year,
            DateTime.now().month,
            DateTime.now().day,
          ).add(Duration(days: i)
          )
      );
    
    原有调用代码无需修改。
  • 方案2:调用时先实例化Dashboard类(适合不同Dashboard实例需要单独维护items的场景)
    修改调用处代码,先创建实例再访问成员:
    items: Dashboard().items.map((i) {
            return Builder(
    (...)
    

底层运行原理

Dart中类的成员分为两类,访问规则完全不同:

  • 静态成员:用static关键字声明,属于类本身,仅在类首次加载时初始化一次,全局仅存一份副本,无需创建实例即可通过类名.成员名直接访问。
  • 实例成员:无static修饰,属于类的单个实例对象,每创建一个新的类实例就会单独生成一份副本,必须先实例化类得到对象后,才能通过对象访问,不允许直接用类名调用。

注意:如果选择方案1添加static修饰,items中的DateTime.now()只会在类首次加载时计算一次,如果App长期后台运行跨天,生成的日期会是旧值,需要实时更新日期的场景不建议用静态声明。

内容的提问来源于stack exchange,提问作者gugapl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:39:03