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

如何在Flutter&Dart中将列表转换为Months类实例?

问题说明

现有以下Dart代码:

class MonthModel {
  String? title;
  Months? months;

  MonthModel({this.title, this.months});
}

class Months {
  bool? january;
  bool? february;
  bool? march;
  bool? april;
  Months({this.january, this.february, this.march, this.april});
}

List<MonthModel> selectedMonths = [
  MonthModel(title: "January", months: Months(january: true)),
  MonthModel(title: "February", months: Months(february: true)),
];

当前selectedMonths列表里包含了January和February两个月份,需要根据这个列表生成一个Months类实例,要求该实例的january和february属性为true,最终期望的JSON输出如下:

"months" : {
 "january": true,
 "february": true
}
实现方案

基础合并方法

直接遍历列表,逐个检查每个MonthModel对应的月份属性,合并到新的Months实例中:

Months mergeSelectedMonths(List<MonthModel> selected) {
  // 初始化一个空的Months实例
  final merged = Months();
  
  for (final model in selected) {
    if (model.months?.january == true) merged.january = true;
    if (model.months?.february == true) merged.february = true;
    if (model.months?.march == true) merged.march = true;
    if (model.months?.april == true) merged.april = true;
  }
  
  return merged;
}

// 使用示例
final result = mergeSelectedMonths(selectedMonths);
// result 就是 Months(january: true, february: true)

转JSON输出

如果需要得到示例中的JSON格式,给Months类添加toJson方法,移除值为null的属性:

class Months {
  bool? january;
  bool? february;
  bool? march;
  bool? april;
  Months({this.january, this.february, this.march, this.april});
  
  Map<String, dynamic> toJson() {
    final jsonMap = {
      'january': january,
      'february': february,
      'march': march,
      'april': april,
    };
    // 去掉值为null的键值对,和示例JSON匹配
    jsonMap.removeWhere((key, value) => value == null);
    return jsonMap;
  }
}

// 生成JSON
import 'dart:convert';

final jsonStr = jsonEncode({'months': result.toJson()});
print(jsonStr);
// 输出:{"months":{"january":true,"february":true}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:09:21