Dart中GroupBy实例转换问题求助:长期尝试未解决
问题解决
1. 解决Instance of 'GroupBy'的打印问题
你看到的输出是因为Dart自定义类默认的toString()方法只会返回类实例标识,不会输出具体属性。需要给GroupBy类重写toString方法,同时确保fromJson解析逻辑正确:
class GroupBy { final String date; final String eventDescp; final String eventTitle; GroupBy({ required this.date, required this.eventDescp, required this.eventTitle, }); factory GroupBy.fromJson(Map<String, dynamic> json) { return GroupBy( date: json['date'], eventDescp: json['eventDescp'], eventTitle: json['eventTitle'], ); } // 重写toString,打印时显示对象具体属性 @override String toString() { return 'GroupBy(date: $date, eventDescp: $eventDescp, eventTitle: $eventTitle)'; } }
添加后再运行代码,打印mySelectedEvents就会显示每个对象的实际数据,而不是实例标识。
2. 按日期分组事件(若这是你的真实需求)
从变量名和数据结构来看,你大概率想要按日期对事件进行分组,而非单纯转换对象。可以用Map<String, List<GroupBy>>实现分组逻辑:
修改main函数:
Future<void> main() async { final res = await dbRequest(); print(res); // 转换所有数据为GroupBy对象 final allEvents = res.map((e) => GroupBy.fromJson(e)).toList(); // 按日期分组 final groupedEvents = <String, List<GroupBy>>{}; for (var event in allEvents) { groupedEvents.putIfAbsent(event.date, () => []).add(event); } // 打印分组结果 print(groupedEvents); }
输出会变成按日期聚合的结构,类似:
{2022-09-17: [GroupBy(date: 2022-09-17, eventDescp: azerty, eventTitle: azertyui), GroupBy(date: 2022-09-17, eventDescp: 11, eventTitle: AZE), ...], 2022-09-20: [GroupBy(date: 2022-09-20, eventDescp: 77, eventTitle: HHJ)]}
内容的提问来源于stack exchange,提问作者Zana Souleymane Coulibaly
相关产品推荐
相关产品推荐

