You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:19:59