如何在Dart/Flutter中解码Supabase返回的数据?
处理Supabase查询结果并转换为Dart对象
一、先明确返回数据的类型
你的Supabase查询返回的data已经是**List<Map<String, dynamic>>**类型,不需要再手动调用jsonDecode——SDK已经帮你完成了解析工作,这应该是你之前尝试解析失败的原因。
二、快速打印查询结果
直接遍历或打印整个列表就能看到数据:
// 打印完整结果 print(data); // 格式化打印每个国家及下属城市 for (final country in data) { print('国家:${country['name']}'); final cities = country['cities'] as List<dynamic>; for (final city in cities) { print(' 城市:${city['name']}'); } }
三、转换为强类型Dart对象
为了更安全规范地使用数据,建议定义对应的实体类:
1. 定义实体类
// 城市实体 class City { final String name; City({required this.name}); // 从Map转City对象 factory City.fromMap(Map<String, dynamic> map) { return City( name: map['name'] as String, ); } } // 国家实体 class Country { final String name; final List<City> cities; Country({required this.name, required this.cities}); // 从Map转Country对象 factory Country.fromMap(Map<String, dynamic> map) { final cityMaps = map['cities'] as List<dynamic>; final cities = cityMaps.map((map) => City.fromMap(map as Map<String, dynamic>)).toList(); return Country( name: map['name'] as String, cities: cities, ); } }
2. 将查询结果转为实体类列表
// 转换为强类型列表 final List<Country> countries = data.map((map) => Country.fromMap(map as Map<String, dynamic>)).toList(); // 打印实体类数据 for (final country in countries) { print('国家:${country.name}'); for (final city in country.cities) { print(' 城市:${city.name}'); } }
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

