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

Flutter Syncfusion Calendar预约数据重复问题解决咨询

解决Flutter Syncfusion Calendar切换视图时日程重复添加的问题

问题原因

每次切换Calendar视图(尤其是日程视图)时,handleLoadMore方法会被重复触发,原代码每次都会全量查询数据库数据并添加到预约列表,导致重复数据堆积。

修复方案

通过添加加载状态标记,确保仅执行一次全量数据加载,具体步骤如下:

1. 在Calendar数据源类中添加加载状态标记

假设你的数据源类是继承自CalendarDataSource的_EventDataSource,添加布尔变量标记数据是否已加载:

class _EventDataSource extends CalendarDataSource {
  // 标记数据是否已完成加载
  bool isDataLoaded = false;

  // 原有其他代码...
}

2. 修改handleLoadMore函数,阻止重复加载

在函数开头检查加载状态,若已加载则直接返回;加载完成后标记状态为已加载:

Future<void> handleLoadMore(DateTime startDate, DateTime endDate) async {
  // 数据已加载则直接返回,避免重复查询添加
  if (_events.isDataLoaded) return;

  await Future<void>.delayed(const Duration(seconds: 1));
  final List<_Meeting> appointmentData = [];

  final prefs = await SharedPreferences.getInstance();
  var int1 = await prefs.getInt('id');
  final conn = await db.getConnection();
  
  try {
    var result = await conn.query(
      'SELECT kyttr FROM  ${db_adi}.web_dis_fircalama where kytkll =? order by kyttr asc',
      [int1],
    );

    notceklist = result.toList();
    
    for(var i = 0; i < notceklist.length; i ++){
      _Meeting meetingData = _Meeting(
        '${notceklist[i]['kyttr'].toString().split(' ')[1].substring(0,5)} Saatinde dişlerinizi fırçaladınız.',
        _convertDateFromString(notceklist[i]['kyttr'].toString()),
        _convertDateFromString(notceklist[i]['kyttr'].toString()),
        Colors.blue,
        true,
      );
      appointmentData.add(meetingData);
    }

    appointments.addAll(appointmentData); 
    notifyListeners(CalendarDataSourceAction.add, appointmentData);
    // 标记数据已完成加载
    _events.isDataLoaded = true;
  } finally {
    // 确保数据库连接无论是否出错都会关闭
    await conn.close();
  }
}

额外优化说明

  • 将原代码的then链式调用改为async/await,逻辑更清晰且便于错误处理
  • 使用try/finally保证数据库连接在操作完成后关闭,避免资源泄漏

扩展:支持增量加载(可选)

如果后续需要实现滚动加载新数据(而非一次性加载全部),可调整逻辑:

  • 记录已加载数据的最大日期
  • 在handleLoadMore中仅查询该日期之后的新数据
  • 更新已加载的最大日期,避免重复查询旧数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:45:29