数据库事件未显示,如何在代码中使用loadPreviousEvents返回的mySelectedEvents?
解决方法
要在_listOfDayEvents方法中使用loadPreviousEvents返回的数据,需要先处理异步加载逻辑,并将数据存储到类的成员变量中,步骤如下:
1. 声明成员变量存储事件数据
在你的State类(或对应业务类)中添加成员变量,用于保存加载完成后的分组事件:
Map<String, List<Map>>? _mySelectedEvents;
2. 异步加载并更新状态
在合适的时机(比如StatefulWidget的initState方法)调用loadPreviousEvents,获取数据后通过setState更新UI状态:
@override void initState() { super.initState(); _fetchEvents(); } Future<void> _fetchEvents() async { final events = await loadPreviousEvents(); setState(() { _mySelectedEvents = events; }); }
3. 修改_listOfDayEvents方法使用数据
更新_listOfDayEvents,使用成员变量并处理数据未加载完成的情况:
List _listOfDayEvents(DateTime dateTime) { final dateKey = DateFormat('yyyy-MM-dd').format(dateTime); // 数据未加载或无对应日期事件时返回空列表 return _mySelectedEvents?[dateKey] ?? []; }
关键注意事项
- 确保
loadPreviousEvents中用作key的item['date']格式,和_listOfDayEvents里DateFormat('yyyy-MM-dd')生成的字符串完全一致,否则会出现找不到对应事件的情况。 - 因为数据是异步加载的,初始阶段
_mySelectedEvents为null,此时_listOfDayEvents会返回空列表,直到数据加载完成并触发状态更新。
内容的提问来源于stack exchange,提问作者Zana Souleymane Coulibaly
相关产品推荐
相关产品推荐

