Supabase Flutter数据读取异常:无法获取main_categories数据求助
解决Supabase Flutter数据读取报错:The getter 'data' isn't defined for the type 'List<Map<String, dynamic>>'
问题核心分析
这个报错的本质是你尝试调用data属性的对象,实际类型是List<Map<String, dynamic>>——也就是Supabase查询直接返回的结果列表,而非包含data字段的响应对象。这通常是因为AI生成的代码沿用了旧版Supabase Flutter的API写法,而当前你使用的版本(v1.0.0+)的查询逻辑已经简化。
正确实现代码
针对新版本Supabase Flutter,直接await查询语句即可获取结果列表,无需额外提取data属性。以下是从main_categories表读取name字段并填充categoryNames的正确代码:
import 'package:supabase_flutter/supabase_flutter.dart'; List<String> categoryNames = []; Future<void> fetchMainCategories() async { try { // 直接获取查询结果,返回类型为List<Map<String, dynamic>> final queryResult = await Supabase.instance.client .from('main_categories') .select('name'); // 仅指定需要的name字段 // 将结果映射为字符串列表 categoryNames = queryResult .map((category) => category['name'] as String) .toList(); } catch (error) { print('获取分类数据失败: $error'); // 可添加UI层面的错误提示逻辑 } }
常见错误排查点
API版本差异
旧版Supabase Flutter需要通过.execute()获取包含data的响应对象,例如:// 旧版写法(已被废弃,新版本不兼容) final response = await supabase.from('main_categories').select('name').execute(); final data = response.data;新版本中
.execute()已被移除,直接await select()即可返回结果列表,因此调用response.data会触发报错。表权限配置
即使anonKey和URL配置正确,若未给main_categories表配置读取策略,匿名用户将无法访问数据。在Supabase控制台的Authentication > Policies中添加读取策略:CREATE POLICY "允许匿名用户读取分类数据" ON "public"."main_categories" FOR SELECT USING (true);字段/表名拼写
确认main_categories表名和name字段的拼写与Supabase控制台中的完全一致,大小写敏感。
内容的提问来源于stack exchange,提问作者LukaszAdler
相关产品推荐
相关产品推荐

