startWifiConfig method

Future<String> startWifiConfig({
  1. int timeout = 200000,
})

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();
  }
}