You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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...'); // 一直停在这里
      },
    ),
  ],
)

我已经尝试过的排查方案

因为问题只出现在无开发环境的纯净机器上,我首先怀疑是依赖缺失,做了以下尝试,但都没解决问题:

  1. 防火墙配置:在客户端机器上手动添加了应用的防火墙允许规则(私有+公开网络全放开),无效
  2. VC++运行时补全
    • 一开始尝试用Inno Setup把msvcp140.dllvcruntime140.dllvcruntime140_1.dll和应用exe打包在一起,问题依旧
    • 后来改成在安装时自动执行VS2015-2022官方的vc_redist.x64.exe(参数/install /passive /norestart),安装过程完全正常,但实时流还是没反应

我的疑问与求助方向

现在我卡在这里,因为HTTPS正常、WebSocket异常,我猜测是WebSocket相关的依赖或者系统策略问题,但实在想不到还有什么遗漏的点:

  • 除了VC++运行时,Flutter Windows应用的WebSocket功能还依赖Windows系统的哪些组件?比如加密证书、特定的网络服务?
  • Windows有没有默认的安全策略,会阻止桌面应用发起WebSocket连接,而开发机因为有开发环境自动豁免了?
  • 有没有可能是Inno Setup打包时,漏掉了supabase_flutter依赖的WebSocket相关动态库?

有没有遇到过类似问题的朋友,或者对Flutter Windows桌面应用的底层依赖比较熟悉的大佬,麻烦给点排查思路,万分感谢!

火山引擎 最新活动