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

Flutter插入Syncfusion日历事件报实例成员不可静态访问错误如何解决

错误原因

InsertEvent类中定义的addEvent是实例成员方法,只能通过类的实例对象访问,但你调用时直接使用类名InsertEvent.addEvent(event),属于静态访问的方式,因此触发了Dart的语法报错。
同时你当前的InsertEvent写法如果每次创建新实例,内部存储事件的_events列表也会跟着重置,无法实现全局共享事件数据的需求。

修复方案

以下两种方案都不需要引入provider即可使用:

方案1:将InsertEvent改为单例类(更推荐,扩展性更强)

单例模式可以保证全局只有一个InsertEvent实例,所有地方共用同一个事件列表:

class InsertEvent {
  // 单例初始化逻辑
  static final InsertEvent _instance = InsertEvent._internal();
  factory InsertEvent() => _instance;
  InsertEvent._internal();

  final List<Events> _events = [];
  List<Events> get events => _events;

  void addEvent(Events event) {
    _events.add(event);
  }
}

调用时调整为通过单例实例访问即可:

// 把原来的InsertEvent.addEvent(event);替换为下面的写法
InsertEvent().addEvent(event);

后续要获取全局事件列表时,直接调用InsertEvent().events即可。

方案2:将成员改为静态成员

不需要创建实例,直接通过类名访问:

class InsertEvent {
  // 改成静态变量
  static final List<Events> _events = [];
  static List<Events> get events => _events;

  // 改成静态方法
  static void addEvent(Events event) {
    _events.add(event);
  }
}

这种方案你原来的调用代码InsertEvent.addEvent(event)不需要做任何修改就能直接运行。


补充:如果需要新增事件后Syncfusion Calendar自动展示新事件,记得修改事件列表后调用对应Calendar组件的刷新逻辑,比如用setState更新绑定的事件源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:15:02