start method
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;
}