esp_provisioning_wifi 0.1.1
esp_provisioning_wifi: ^0.1.1 copied to clipboard
Bloc wrapper over 'flutter_esp_ble_prov' which provisions WiFi on Espressif ESP32 devices over Bluetooth using Espressif-provided provisioning libraries.

esp_provisioning_wifi #
Library to provision WiFi on ESP32 devices over Bluetooth, using Bloc.
API Notes #
- Import the package via the public barrel:
import 'package:esp_provisioning_wifi/esp_provisioning_wifi.dart';
provisionWifi(...)returnsFuture<bool>(non-null).truemeans provisioning completed successfully.falsemeans provisioning completed but was not successful.
cancelOperations()returnsFuture<bool>and cancels active native work.EspProvisioningState.failureexposes typed failures usingEspProvisioningFailure.none,permissionDenied,timeout,cancelled,deviceNotFound,invalidResponse,platform,unknown.
EspProvisioningState.errorCodeanderrorDetailsexpose raw platform diagnostics.EspProvisioningState.timedOutis removed and replaced by typed failure checks:- use
state.failure == EspProvisioningFailure.timeout.
- use
scanWifiNetworks(...)andprovisionWifi(...)accept optionalconnectTimeout.- This timeout is propagated through Dart and native layers for BLE connection timing.
fetchCustomData(...)reads provisioning custom endpoint payloads (defaults to endpointcustom-data).- Useful for firmware-driven provisioning metadata such as lock state or SoftAP password hints.
Error Code Contract #
Native layers report stable error codes that the bloc maps into EspProvisioningFailure:
E0(EspProvisioningErrorCodes.missingArgument)E1(EspProvisioningErrorCodes.wifiScanFailed)E_PERMISSIONE_BLE_SCAN_STARTE_BLE_SCANE_DEVICE_NOT_FOUNDE_INVALID_RESPONSEE_CONNECT_TIMEOUTE_CONNECTE_CUSTOM_DATAE_DEVICEDEVICE_DISCONNECTEDE_CANCELLEDE_TIMEOUTE_UNKNOWN
Import: package:esp_provisioning_wifi/esp_provisioning_error_codes.dart.
Migration (0.0.x -> 0.1.0) #
- Replace
state.timedOutchecks withstate.failure == EspProvisioningFailure.timeout. - For error UX and telemetry, use both:
state.failurefor typed handlingstate.errorCodeandstate.errorDetailsfor diagnostics
- If you call service methods directly, invoke
cancelOperations()before starting a new scan/provision flow to cancel stale native operations. - Replace direct
srcimports with:import 'package:esp_provisioning_wifi/esp_provisioning_wifi.dart';
Usage #
BlocProvider(
create: (_) => EspProvisioningBloc(),
child: BlocConsumer<EspProvisioningBloc, EspProvisioningState>(
listener: (_, state) {
if (state.status == EspProvisioningStatus.error) {
// Use typed failure for user-facing behavior.
debugPrint('Failure: ${state.failure} | ${state.errorMsg}');
}
},
builder: (_, state) {
return Text('Status: ${state.status}');
},
),
)
Requirements #
Android 6 (API level 23)+ #
Make sure your android/build.gradle has 23+ here:
defaultConfig {
minSdkVersion 23
}
If your app enforces repositories via settings.gradle (dependencyResolutionManagement),
ensure jitpack.io is present:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Bluetooth permissions are automatically requested by the library.
iOS 13.0+ #
Add this in your ios/Runner/Info.plist:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Our app uses bluetooth to find, connect and transfer data between different devices</string>
Notes #
flutter_esp_ble_prov #
This library is a Bloc wrapper over flutter_esp_ble_prov.
esp-idf-provisioning-android #
The Espressif Android Provisioning library is currently embedded in libs.