refreshWifiNetworks method

Future<void> refreshWifiNetworks({
  1. String? ssid,
})

Implementation

Future<void> refreshWifiNetworks({String? ssid}) async {
  final WifiScanStatus? initialStatus =
      await bleManager.sendCommand<WifiScanStatus>(
    WifiCheckScanStatusBleCommandTx(),
  );
  if (initialStatus == null || initialStatus.done) {
    await bleManager.sendCommand<void>(
      WifiStartScanBleCommandTx(ssid: ssid),
    );
  }

  WifiScanStatus? status = await bleManager.sendCommand<WifiScanStatus>(
    WifiCheckScanStatusBleCommandTx(),
  );

  int pollCount = 0;
  const int maxPollCount = 10;
  const pollDelay = Duration(milliseconds: 500);
  final List<WifiNetwork> networks = [];
  int lastNumResults = 0;
  while (status != null && !status.done && pollCount < maxPollCount) {
    await Future.delayed(pollDelay);
    status = await bleManager.sendCommand<WifiScanStatus>(
      WifiCheckScanStatusBleCommandTx(),
    );
    if (status != null && status.numResults > lastNumResults) {
      await _fetchWifiScanResults(
        networks,
        lastNumResults,
        status.numResults,
      );
      lastNumResults = status.numResults;
    }
    pollCount++;
  }

  // Final fetch in case scan completed between last check and now
  if (status != null && status.numResults > lastNumResults) {
    await _fetchWifiScanResults(
      networks,
      lastNumResults,
      status.numResults,
    );
  }
}