Flutter调用Supabase Storage list()获取文件夹文件返回空列表求助
解决Supabase Storage获取文件夹文件返回空列表的问题
以下是几个可能的原因及对应的解决办法:
1. 存储桶RLS权限策略不足
虽然getPublicUrl能正常生成链接,但list操作需要单独的读取权限。Supabase Storage的列表查询受RLS(行级安全)策略控制,默认情况下可能没有允许读取文件夹内容的权限。
你需要在Supabase控制台的Storage > 目标存储桶(public-images) > 权限中添加对应的SELECT策略,示例如下:
CREATE POLICY "允许读取文件夹1的内容" ON storage.objects FOR SELECT USING ( bucket_id = 'public-images' AND path LIKE '1/%' );
如果需要更通用的权限(比如允许用户读取自己的文件夹),可以根据业务逻辑调整策略条件。
2. 路径参数异常
确认folderId.toString()的输出确实是'1',没有多余空格或特殊字符。可以在fetchFilesFromFolder方法中先打印路径,验证参数正确性:
Future<List<FileObject>> fetchFilesFromFolder() async { final targetPath = folderId.toString(); print('当前查询路径:$targetPath'); // 检查输出是否为预期的'1' return await supabase .storage .from('public-images') .list(path: targetPath); }
3. FutureBuilder使用不当
在build方法中直接调用fetchFilesFromFolder()会导致每次build触发时重复发起请求,可能引发数据异常。建议将Future对象移到initState中初始化:
late Future<List<FileObject>> _filesFuture; @override void initState() { super.initState(); _filesFuture = fetchFilesFromFolder(); } @override Widget build(BuildContext context) { return FutureBuilder<List<FileObject>>( future: _filesFuture, builder: (context, snapshot) { // 现有构建逻辑 }, ); }
4. Supabase SDK版本问题
旧版本的Supabase Flutter SDK可能存在list方法的bug,建议更新到最新稳定版本。修改pubspec.yaml中的依赖:
dependencies: supabase_flutter: ^2.0.0 # 替换为最新版本号
执行flutter pub get完成依赖更新。
内容的提问来源于stack exchange,提问作者Tofu Cha
相关产品推荐
相关产品推荐

