start method

Future<void> start()

Connect to device and start provisioning process

Implementation

Future<void> start() async {
  _log.info('started');
  if (state != WifiProvisioningState.initial &&
      state != WifiProvisioningState.sessionFailure &&
      state != WifiProvisioningState.failure) {
    throw StateError('start called in unexpected state $_state');
  }

  reset();

  provisioning = provisioningFactory();

  _state = WifiProvisioningState.connecting;
  final isConnected = await provisioning!.establishSession();
  if (_state != WifiProvisioningState.connecting) {
    _log.info('establishSession cancelled');
    return;
  }

  _log.info('scanning');
  if (!isConnected) {
    _log.severe('establish session failed');
    _state = WifiProvisioningState.sessionFailure;
    return;
  }

  _state = WifiProvisioningState.scanning;
  final accessPoints = await provisioning!.startScanWiFi();

  if (_state != WifiProvisioningState.scanning) {
    _log.info('scanning cancelled');
    return;
  }

  if (accessPoints == null) {
    _log.severe('scanning failed');
    _state = WifiProvisioningState.sessionFailure;
    return;
  }

  // Remove duplicate SSIDs
  final seenSsids = <String>{};
  accessPoints.retainWhere((x) => seenSsids.add(x['ssid'] as String));

  _accessPoints = accessPoints;
}