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

Supabase结合Riverpod StreamProvider Family未捕获删除事件问题

问题原因和解决方法

1. 检查cities表的实时规则是否包含DELETE权限

去Supabase控制台的实时板块,找到cities表的实时规则,必须添加允许DELETE操作的规则,否则删除城市不会触发实时通知。示例规则:

CREATE POLICY "允许cities表的DELETE实时通知" ON public.cities
FOR DELETE USING (true); -- 这里可以根据你的业务逻辑加权限限制,比如只允许操作自己创建的数据

如果没有这条规则,删除操作的实时事件根本发不出来,组件自然不会更新。

2. 显式指定Stream监听DELETE事件

虽然Supabase Dart客户端的stream方法默认监听所有事件,但有时候可能因为配置问题漏掉DELETE,直接在代码里显式声明监听所有事件(或单独指定DELETE):
修改你的streamProvider代码:

static final streamProvider =
    StreamProvider.autoDispose.family<List<City>, int>(
  (ref, stateId) {
    var streamBuilder = supabase
        .from('cities')
        .stream(primaryKey: ['id'])
        .eq('state_id', stateId)
        .on(RealtimeListenTypes.all); // 明确监听INSERT/UPDATE/DELETE所有事件
    var stream = streamBuilder
        .map((data) => data.map((json) => City.fromMap(json)).toList());
    return stream;
  },
);

3. 验证实时事件是否触发

在Supabase控制台的实时面板打开日志,执行删除城市操作后,看看有没有DELETE事件的日志输出。如果没日志,说明规则没配对;如果有日志但组件没更新,再检查Stream的映射逻辑有没有问题。


内容的提问来源于stack exchange,提问作者Ufder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:42:38