Flutter Windows桌面应用Supabase实时流在纯净客户端机器上静默失败排查求助
Flutter Windows桌面应用Supabase实时流在纯净客户端机器上静默失败排查求助
大家好,我最近卡壳好几天了,遇到一个非常诡异的问题:我用Flutter开发了一款Windows桌面应用,基于supabase_flutter包做数据交互。插入数据的功能在所有机器上都完全正常,但Supabase的实时数据流(WebSocket)在纯净的Windows 10客户端机器上彻底静默失败——既不接收任何数据,也不抛出错误,就一直停在等待状态。
在我自己装有Flutter开发环境的Win10/Win11机器上,实时流功能完全正常;但在没有任何开发工具的纯净测试机上(用Inno Setup打包安装的应用),StreamBuilder永远收不到数据,也不会显示错误信息。
环境与核心现象
- ✅ 正常工作环境:装有Flutter SDK的Win10/Win11开发机
- ❌ 故障环境:纯净版Win10系统,仅通过Inno Setup安装我的应用
- 关键矛盾:基于HTTPS的插入操作(
supabase.from('my_table').insert(...))在所有机器上100%成功,但基于WebSocket的实时流(supabase.from('my_table').stream(...))在纯净客户端机器上完全无响应
可复现的最小代码示例
pubspec.yaml 依赖
dependencies: flutter: sdk: flutter supabase_flutter: ^2.3.2 # 我用的是最新稳定版,试过几个旧版本问题依旧
核心UI与业务代码
Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // 这个按钮在所有机器上都能正常插入数据 ElevatedButton( onPressed: () async { try { await supabase.from('my_table').insert({'name': 'Test from Windows'}); print('Insert successful'); } catch (e) { print('Insert failed: $e'); } }, child: const Text('Insert Data (This Works)'), ), const SizedBox(height: 20), const Text('Listening for stream data:'), // 这个StreamBuilder在纯净客户端机器上永远收不到数据,也不报错 StreamBuilder<List<Map<String, dynamic>>>( stream: supabase.from('my_table').stream(primaryKey: ['id']), builder: (context, snapshot) { if (snapshot.hasError) { return Text('Error: ${snapshot.error}'); } if (snapshot.hasData) { // 这个状态在纯净客户端机器上永远不会触发 return Text('Received data: ${snapshot.data!.length} records'); } return const Text('No data yet...'); // 一直停在这里 }, ), ], )
我已经尝试过的排查方案
因为问题只出现在无开发环境的纯净机器上,我首先怀疑是依赖缺失,做了以下尝试,但都没解决问题:
- 防火墙配置:在客户端机器上手动添加了应用的防火墙允许规则(私有+公开网络全放开),无效
- VC++运行时补全:
- 一开始尝试用Inno Setup把
msvcp140.dll、vcruntime140.dll、vcruntime140_1.dll和应用exe打包在一起,问题依旧 - 后来改成在安装时自动执行VS2015-2022官方的
vc_redist.x64.exe(参数/install /passive /norestart),安装过程完全正常,但实时流还是没反应
- 一开始尝试用Inno Setup把
我的疑问与求助方向
现在我卡在这里,因为HTTPS正常、WebSocket异常,我猜测是WebSocket相关的依赖或者系统策略问题,但实在想不到还有什么遗漏的点:
- 除了VC++运行时,Flutter Windows应用的WebSocket功能还依赖Windows系统的哪些组件?比如加密证书、特定的网络服务?
- Windows有没有默认的安全策略,会阻止桌面应用发起WebSocket连接,而开发机因为有开发环境自动豁免了?
- 有没有可能是Inno Setup打包时,漏掉了
supabase_flutter依赖的WebSocket相关动态库?
有没有遇到过类似问题的朋友,或者对Flutter Windows桌面应用的底层依赖比较熟悉的大佬,麻烦给点排查思路,万分感谢!




