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

从预填充的Supabase表获取数据返回空数组求助

Supabase Realtime流返回空数据的解决方法

问题描述

首次使用Supabase Realtime,希望实时访问表中数据并通过应用交互更新数据。已在Supabase中预填充数据库,但调用流获取数据时返回空数组,控制台输出[]。

数据库设置截图:
数据库设置截图

使用的Dart代码:

class _TrackerState extends State<Tracker> {
  @override
  Widget build(BuildContext context) {
    final SupabaseClient supabase = Supabase.instance.client;
    final stream = supabase.from('Counter').stream(primaryKey: ["name"]);
    return Scaffold(
      appBar: ...
      ),
      body: Center(
        child: StreamBuilder(
          stream: stream,
          builder: (context, snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.active:
                if (snapshot.hasError) log(snapshot.error.toString());
                log(snapshot.data.toString());

                final data = snapshot.data as List<dynamic>;

                return ...
              default:
                return const Scaffold(
                    body: Center(
                  child: SizedBox(
                    child: CircularProgressIndicator(),
                  ),
                ));
            }
          },
        ),
      ),
    );
  }
}

解决步骤

  • 检查Realtime服务状态
    进入Supabase控制台对应项目,打开Database -> Realtime页面,确认Counter表的Realtime服务已开启,且至少勾选SELECT权限(用于读取数据)。

  • 验证主键配置
    代码中指定了primaryKey: ["name"],需确保Counter表的name字段是主键(或复合主键的一部分)。可在Database -> Tables -> Counter表的Columns页面查看主键设置,若name不是主键,需修改主键配置或调整代码中的primaryKey参数。

  • 检查行级安全(RLS)策略
    若Counter表启用了RLS,需确保存在允许当前用户读取数据的策略:

    • 前往Database -> Tables -> Counter表的Policies页面,查看现有策略;
    • 可临时添加测试策略:CREATE POLICY "允许所有用户读取Counter表" ON "public"."Counter" FOR SELECT USING (true);,测试是否能获取数据;
    • 若不需要RLS,可暂时关闭该功能,排查是否为策略导致的问题。
  • 确认表名大小写一致
    PostgreSQL默认区分大小写,确保代码中的表名Counter与数据库中实际表名完全一致(包括大小写),若数据库中是小写counter,代码需同步修改。

  • 测试基础查询
    在initState中添加普通查询测试,确认数据本身可被读取:

    @override
    void initState() {
      super.initState();
      supabase.from('Counter').select().then((value) {
        log('普通查询结果: $value');
      });
    }
    

    若普通查询也返回空,说明问题不在Realtime流,需排查数据权限、表名匹配等基础问题;若普通查询有数据,再聚焦Realtime配置。

内容的提问来源于stack exchange,提问作者Sunken In Time

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:22:26