Flutter Android应用SoftAp配网后HTTP请求失败问题排查
Android Flutter应用ESP配网后连续请求失败问题
开发的Android端Flutter应用可实现ESP设备WiFi添加与请求发送,但配网与请求单独执行均正常,连续操作则请求失败。
目标全链路流程:应用内先连接ESP自身热点,通过SoftAp配网下发本地WiFi凭证并应用配置;待ESP与手机处于同一局域网、发现设备后发送认证请求,此时出现如下错误:
E/flutter (31739): [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: Connection failed E/flutter (31739): #0 IOClient.send (package:http/src/io_client.dart:88:7) E/flutter (31739): <asynchronous suspension> E/flutter (31739): #1 ChopperClient.send (package:chopper/src/base.dart:305:23) E/flutter (31739): <asynchronous suspension> E/flutter (31739): #2 ESPDevice.sendRequest ([...filepath...]) E/flutter (31739): <asynchronous suspension>
请求可正常执行的场景
- 完全关闭并重新打开应用后
- 使用未参与配网的手机
- 通过Postman发送请求
- 经Apple Home完成配网后
- 使用ESP SoftAP Prov应用配网后重新打开应用
请求执行失败的场景
- 在应用内完成配网后
- 应用后台运行时,通过ESP SoftAP Prov应用完成配网后
简化配网代码
await WiFiForIoTPlugin.connect(ssid, password: password); await WiFiForIoTPlugin.forceWifiUsage(true); Provisioning provisioning = Provisioning(transport: TransportHTTP(hostname: '192.168.4.1:80'), security: Security1(pop: pop)); await provisioning.establishSession(); await provisioning.sendWifiConfig(ssid: newSsid, password: newPassword); await provisioning.applyWifiConfig(); await WiFiForIoTPlugin.disconnect();
OnWillPop处理代码
await provisioning.dispose(); await WiFiForIoTPlugin.disconnect();
使用的依赖包
- bonsoir: ^2.0.0(局域网设备发现)
- http: ^0.13.5(请求发送)
- chopper: ^4.0.6(请求发送)
- esp_provisioning_softap: ^1.0.3(ESP设备配网)
- wifi_iot: ^0.3.18(应用内连接ESP热点)
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

