如何在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
相关产品推荐
相关产品推荐

