Flutter中如何在Supabase Stream中使用多个过滤器?
问题:Flutter中Supabase流式查询多过滤器报错,提示仅能使用一个过滤器
我在Flutter里用Supabase流式获取评论数据,想要筛选post_id等于postId且deleted_at为null的条目,但链式调用多个.eq()过滤器时触发报错。
报错信息
Exception has occurred. _AssertionError ('package:supabase/src/supabase_stream_builder.dart': Failed assertion: line 90 pos 7: '_streamFilter == null': Only one filter can be applied to `.stream()`)
原代码
final response = Supabase.instance.client .from('comments') .stream(primaryKey: ['comment_id']) .eq('post_id', postId) .eq('deleted_at', null) .order('created_at', ascending: false);
解决方法
Supabase的.stream()方法不支持链式调用多个独立过滤器,但可以通过以下两种方式实现多条件筛选:
方法1:使用.filter()合并多条件
用.filter()方法将多个条件通过and逻辑合并,同时注意判断空值要用'is'操作符(对应SQL的IS NULL):
final response = Supabase.instance.client .from('comments') .stream(primaryKey: ['comment_id']) .filter( 'post_id', 'eq', postId, filter: Filter( 'deleted_at', 'is', null, ), ) .order('created_at', ascending: false);
方法2:创建数据库视图封装筛选逻辑
如果这个多条件筛选需要频繁使用,建议在Supabase控制台创建视图,把筛选规则封装到数据库层:
- 进入Supabase控制台,打开SQL编辑器,执行创建视图的语句:
CREATE VIEW active_post_comments AS SELECT * FROM comments WHERE deleted_at IS NULL;
- 在Flutter代码中直接查询该视图,再补充
post_id的筛选:
final response = Supabase.instance.client .from('active_post_comments') .stream(primaryKey: ['comment_id']) .eq('post_id', postId) .order('created_at', ascending: false);
内容的提问来源于stack exchange,提问作者ddongyun
相关产品推荐
相关产品推荐

