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
相关产品推荐
相关产品推荐

