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

Flutter+sqflite实现指定日期区间价格总和计算的方案问询

Flutter中使用sqflite实现日期区间总价计算

针对你现有代码中的问题,以下是修正和优化后的实现方案:

1. 数据库层函数优化

修正函数拼写错误,同时使用SQL参数绑定避免安全隐患,并直接返回处理后的数值类型:

class DatabaseHelper {
  // ... 原有代码保持不变 ...

  // 修正函数名拼写,优化SQL参数绑定,返回处理后的double值
  Future<double> calculateTotalPeriod(String startDate, String endDate) async {
    final db = await database;
    // 使用?占位符绑定参数,避免SQL注入风险
    final result = await db.rawQuery(
      "SELECT SUM($colPrix) AS TOTAL FROM $clientTable WHERE $colDate BETWEEN ? AND ?",
      [startDate, endDate],
    );
    // 处理查询结果,空值或非数值情况返回0.0
    return double.tryParse(result.first['TOTAL'].toString()) ?? 0.0;
  }
}

2. UI层逻辑修正

修复结果取值错误、变量名错误,并增加日期合法性校验:

class ClientListState extends State<ClientList> {
  // ... 原有代码保持不变 ...

  // 修正总价计算逻辑
  void calculateTotalPeriod() async {
    // 校验日期是否完整选择
    if (startDate.isEmpty || endDate.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('请选择完整的起止日期')),
      );
      return;
    }
    // 校验结束日期不早于开始日期
    final start = DateTime.parse(startDate);
    final end = DateTime.parse(endDate);
    if (end.isBefore(start)) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('结束日期不能早于开始日期')),
      );
      return;
    }

    // 调用优化后的数据库函数
    final totalSum = await databaseHelper.calculateTotalPeriod(startDate, endDate);
    setState(() {
      somme_period = totalSum;
      // 修正变量名错误:somme → somme_period
      somme_total_period = somme_period.toStringAsFixed(2);
    });
  }

  @override
  Widget build(BuildContext context) {
    // ... 原有代码保持不变 ...

    // 对话框内的按钮绑定修正后的函数
    OutlinedButton(
      onPressed: calculateTotalPeriod,
      child: const Text('计算区间总价'),
    ),

    // ... 原有代码保持不变 ...
  }
}

关键注意事项

  • 确保数据库中colDate字段的存储格式与日期选择器输出格式一致(均为yyyy-MM-dd)
  • 可根据需求增加加载状态提示(比如计算时显示CircularProgressIndicator)
  • 如果涉及多语言或不同地区日期格式,需统一日期解析/格式化规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:38:49