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

Flutter中基于标签与交易类型过滤数据的优化实现(空标签处理)

优化Flutter交易数据筛选逻辑

针对你遇到的过滤标签为空时返回空结果的问题,我们可以通过拆分筛选条件、简化逻辑的方式,实现更简洁且符合需求的代码,同时避免冗长的嵌套判断。

优化后的完整代码

class TransactionModel {
  String category;
  double amount;
  bool isExpense;

  TransactionModel({
    required this.category,
    required this.amount,
    this.isExpense = true,
  });

  String printData() {
    return 'Category: $category Amount: ${amount.toString()} isExpense: ${isExpense.toString()}';
  }
}

List<String> _filtertags = []; // 空列表时展示对应交易类型的所有记录
String transactiontype = 'Expense';

List<TransactionModel> transactions = [
  TransactionModel(category: 'Shopping', amount: 4300),
  TransactionModel(category: 'Food', amount: 2200, isExpense: true),
  TransactionModel(category: 'Loan', amount: 400, isExpense: false),
  TransactionModel(category: 'Food', amount: 300, isExpense: false),
  TransactionModel(category: 'Other', amount: 100, isExpense: true),
];

void main() {
  // 拆分筛选条件:交易类型过滤 + 标签过滤
  List<TransactionModel> resultdata = transactions.where((element) {
    // 交易类型过滤逻辑
    bool matchesType = transactiontype == 'All' 
        ? true 
        : transactiontype == 'Expense' 
            ? element.isExpense == true 
            : element.isExpense == false;
    
    // 标签过滤逻辑:空列表时直接通过,否则检查category是否在列表中
    bool matchesTag = _filtertags.isEmpty || _filtertags.contains(element.category);

    // 同时满足两个条件
    return matchesType && matchesTag;
  }).toList();

  for (var x in resultdata) {
    print(x.printData());
  }
}

关键逻辑说明

  • 标签过滤:使用_filtertags.isEmpty || _filtertags.contains(element.category),当标签列表为空时,该条件直接返回true,不对类别做额外过滤;当列表有值时,仅保留category在列表中的记录。
  • 交易类型过滤:将类型判断单独抽离,避免多层嵌套的三元运算符,可读性更强。
  • 条件组合:通过&&同时满足交易类型和标签的过滤要求,逻辑清晰且易于维护。

示例场景验证

  1. 交易类型为'Expense'、过滤标签为[]:标签条件为true,仅过滤isExpense=true的记录,最终返回所有支出交易(Shopping、Food、Other)。
  2. 交易类型为'Expense'、过滤标签为['Food']:同时满足category='Food'且isExpense=true,仅返回对应食品支出记录。
  3. 交易类型为'All'、过滤标签为['Food']:返回所有category为Food的交易,不管收支类型。

代码优势

  • 逻辑拆分清晰,避免了原代码中多层嵌套的三元运算符,可读性大幅提升。
  • 扩展性强:新增交易类型或调整过滤规则时,只需修改对应条件块即可,无需重构整个筛选逻辑。
  • 完全满足需求:空标签时自动展示对应交易类型的所有记录,符合业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:05:53