startWifiConfig method
Implementation
Future<String> startWifiConfig({int timeout = 200000}) async {
if (wifiPwd == null) {
throw FlutterError('should put wifi password');
}
if (_completer != null && !_completer!.isCompleted) {
await _completer!.future;
}
_completer = Completer();
value = WifiConfigState().copyWith(gettingWifiInfo: true);
String ssid = await WifiPlatform.instance.getSSID();
value = value.copyWith(gettingWifiInfo: true, ssid: ssid);
DHCPInfo dhcpInfo;
if (Platform.isAndroid) {
dhcpInfo = await WifiPlatform.instance.getDHCPInfo();
} else {
//iOS 随便填 因为不需要
dhcpInfo = DHCPInfo(
dns1: 100,
dns2: 100,
gateway: 100,
ipAddress: 100,
leaseDuration: 100,
netmask: 100,
serverAddress: 100);
}
value = value.copyWith(dhcpInfo: dhcpInfo);
WifiScanResult scanResult;
if (Platform.isAndroid) {
scanResult = await WifiPlatform.instance.getWifiScanResult();
} else {
//iOS 随便填 因为不需要
scanResult =
WifiScanResult(bssid: '100', ssid: '100', capabilities: '100');
}
if (!_disposed) {
value = value.copyWith(scanResult: scanResult, gettingWifiInfo: false);
}
//iOS只需要ssid、wifiPwd 和 timeOut三个参数,Android的都需要
WifiConfig wifiConfig = WifiConfig(
ssid: ssid,
wifiPwd: wifiPwd,
pwdType: WIFIUtil.getPasswordType(scanResult.capabilities),
dhcpInfo: dhcpInfo,
timeOut: timeout);
if (!_disposed) {
value = value.copyWith(configuring: true);
}
try {
String result = await JFApi.xcDevice.xcStartWifiConfig(wifiConfig:wifiConfig);
if (!_disposed) {
value = value.copyWith(configuring: false, configResult: result);
}
return result;
} catch (e) {
if (!_disposed) {
value = value.copyWith(
configuring: false, configResult: null, errorCode: e as int);
}
return Future.error(e);
} finally {
await JFApi.xcDevice.xcStopWifiConfig();
_completer!.complete();
}
}