使用whereEqualTo时LiveQuery无法正常工作的问题排查
带Pointer列条件的LiveQuery无法接收更新通知
我尝试创建一个包含whereEqualTo条件的LiveQuery实时查询,应用启动后调试控制台显示连接正常,但更新数据库时无法收到任何数据。注释掉..whereEqualTo('commonId', 'h1qUwTisSQ')后,LiveQuery能正常工作,而且相同的查询作为Future对象执行时也完全正常。
注:commonId是rounds表中的Pointer类型列。
调试日志
flutter: LiveQuery: : Socket opened flutter: LiveQuery: : ConnectMessage: {op: connect, applicationId: SL0zySmAoBus5vtNoTPis7odg85IUCdEwFpXM1cX, clientKey: OGNqC9YZMsOK7KaRt0JDkvDm13AnhJUka2WxipaW} flutter: LiveQuery: : Listen: {"op":"connected","clientId":"073e7e6d-ba78-47bb-860b-41cbda2f32f4"} flutter: Re subscription:{} flutter: LiveQueryReconnectingController: LiveQueryClientEvent.connected flutter: LiveQuery: : SubscribeMessage: {op: subscribe, requestId: 1, query: {className: rounds, where: {commonId: h1qUwTisSQ}, fields: [contribution]}} flutter: LiveQuery: : Listen: {"op":"subscribed","clientId":"073e7e6d-ba78-47bb-860b-41cbda2f32f4","requestId":1}
查询代码
class _CommonState extends State<Common> { final LiveQuery liveQuery = LiveQuery(); final QueryBuilder<ParseObject> queryContribution = QueryBuilder<ParseObject>(ParseObject('rounds')) ..whereEqualTo('commonId', 'h1qUwTisSQ') ..orderByAscending('createdAt') ..keysToReturn(['contribution']); startLiveQuery(); void startLiveQuery() async { Subscription subscription = await liveQuery.client.subscribe(queryContribution); subscription.on(LiveQueryEvent.update, (value) { debugPrint("OBJECT UPDATE: $value"); }); } }
解决方案
问题核心在于Pointer类型字段的查询格式错误:直接传入字符串ID无法匹配Parse中Pointer字段的存储结构,LiveQuery无法识别更新事件。
修改查询条件,构造对应Pointer指向的ParseObject实例作为查询值:
final QueryBuilder<ParseObject> queryContribution = QueryBuilder<ParseObject>(ParseObject('rounds')) // 替换为commonId指向的目标类名,例如如果指向Common表则写'Common' ..whereEqualTo('commonId', ParseObject('目标类名')..objectId = 'h1qUwTisSQ') ..orderByAscending('createdAt') ..keysToReturn(['contribution']);
关键说明
Parse的Pointer字段实际存储的是包含__type: Pointer、className和objectId的复合对象,而非单纯字符串ID。普通Future查询可能内部做了隐式转换,但LiveQuery要求严格匹配Pointer结构,因此必须用完整的ParseObject实例作为查询条件。
内容的提问来源于stack exchange,提问作者Peter Julian
相关产品推荐
相关产品推荐

