Dart项目使用Parse LiveQuery报错无ParseConnectivityProvider如何解决?
错误根因
你遇到的报错是因为parse_server_sdk包默认内置的连通性检测提供器仅适配Flutter环境,纯Dart运行环境没有默认实现,必须手动传入自定义的connectivityProvider参数完成初始化。
解决步骤
- 自定义实现极简连通性提供器,纯Dart环境无需复杂的系统网络状态监听,直接固定返回网络连通状态即可:
class CustomParseConnectivityProvider extends ParseConnectivityProvider { @override Future<ParseConnectivityResult> checkConnectivity() async { return ParseConnectivityResult.connected; } @override Stream<ParseConnectivityResult> get connectivityStream => Stream.value(ParseConnectivityResult.connected); }
- 修改
Parse初始化逻辑,新增connectivityProvider参数传入上面的自定义实现:
await Parse().initialize( keyApplicationId, keyParseServerUrl, clientKey: keyClientKey, liveQueryUrl: liveQueryURL, autoSendSessionId: true, debug: true, // 新增这一行 connectivityProvider: CustomParseConnectivityProvider(), );
完整可运行代码
import 'package:parse_server_sdk/parse_server_sdk.dart'; // 自定义连通性提供器 class CustomParseConnectivityProvider extends ParseConnectivityProvider { @override Future<ParseConnectivityResult> checkConnectivity() async { return ParseConnectivityResult.connected; } @override Stream<ParseConnectivityResult> get connectivityStream => Stream.value(ParseConnectivityResult.connected); } Future<void> main(List<String> arguments) async { final keyApplicationId = 'XXX'; final keyClientKey = 'XXX'; final keyParseServerUrl = 'https://parseapi.back4app.com'; final liveQueryURL = 'wss://XXX.b4a.io'; await Parse().initialize( keyApplicationId, keyParseServerUrl, clientKey: keyClientKey, liveQueryUrl: liveQueryURL, autoSendSessionId: true, debug: true, connectivityProvider: CustomParseConnectivityProvider(), ); final LiveQuery liveQuery = LiveQuery(); QueryBuilder<ParseObject> query = QueryBuilder<ParseObject>(ParseObject('Color')); Subscription subscription = await liveQuery.client.subscribe(query); subscription.on(LiveQueryEvent.create, (value) { print('Object: ' + value['color']); print((value as ParseObject).get('color')); }); }
附加排查项
如果修改后仍无法正常运行,可逐一核对以下配置:
- 确认Back4App后台已开启LiveQuery功能,且需要监听的
Color类已加入LiveQuery的启用类列表 - 确认
liveQueryURL填写正确,Back4App默认LiveQuery地址规则为wss://<你的应用ID>.b4a.io - 可通过debug日志查看具体的握手错误信息,定位是否是权限或地址配置问题
内容的提问来源于stack exchange,提问作者RobbB
相关产品推荐
相关产品推荐

