Skip to content

dotintent/flutter-accessorysetup

Folders and files

NameName
Last commit message
Last commit date
Jul 11, 2024
Jan 30, 2025
Dec 14, 2024
Feb 4, 2025
Feb 4, 2025
Jan 13, 2025
Dec 17, 2024
Jun 28, 2024
Feb 4, 2025
Dec 19, 2024
Jul 11, 2024
Jan 9, 2025
Dec 12, 2024
Jun 28, 2024
Dec 14, 2024
Feb 4, 2025

Repository files navigation

Flutter Accessory Kit

At this stage the library supports:

  • BLE
  • WiFi
  • Migration

‼️ One important remark: by Apple's design, the library works only with iOS 18 or above. ‼️

🚇 How to use

Install the library using the command line:

flutter pub get flutter_accessorysetup

⚙️ Setup

  • For the full details refer apple docs

  • You should add the keys to the Info.plist of the iOS app to make it work. ⚠️ If you miss the required key the app will crash when you show the picker. ⚠️

    • ALWAYS: (Bluetooth or WiFi, or both)
    <key>NSAccessorySetupKitSupports</key>
    <array>
      <string>Bluetooth</string>
      <string>WiFi</string>
    </array>
    • When you use the ASDiscoveryDescriptor with bluetoothServiceUUID
      ⚠️ The UUID string must be upper-cased here. ⚠️
    <key>NSAccessorySetupBluetoothServices</key>
    <array>
      <string>149E9E42-33AD-41AD-8665-70D153533EC1</string>
    </array>
    • When you use the ASDiscoveryDescriptor with bluetoothNameSubstring
      ⚠️ Does not work in the iOS 18 Developer beta 2. ⚠️
    <key>NSAccessorySetupBluetoothNames</key>
    <array>
      <string>DeviceName</string>
    </array>
    • There is an option with manufacturer ID that is not covered here.
  • Use the FlutterAccessorySetup class. See the full code example in the Example app

final _accessorySetup = FlutterAccessorySetup();

void activate() {
  _accessorySetup.eventStream.listen((event) {
        debugPrint('Got event: ${event.eventType}');
        // handle session events here
  }));
  await _accessorySetup.activate();
  try {
    _accessorySetup.showPickerForDevice(
      'My Ble', Assets.images.ble.path, '4013ABDE-11C0-49E7-9939-4B4567C26ADA'
    );
  } on PlatformException {
    debugPrint('Failed to show the picker');
  }
}

void deactivate() {
  accessorySetup.dispose();
  super.deactivate();
}

ℹ️ What we know

  • You app does not need Bluetooth permissions when you use the picker to work with bluetooth devices.

  • It is very easy for user to select the device from a picker.

  • ⚠️ If you want to have multiple devices of the same type displayed in the picker, each device should advertise a unique name. The picker will show only one device per unique name. If your device exposes 0x1800 service, the device name in that service should be unique too⚠️

  • When the user closes the Picker by tapping the cross button, the showPicker closure emits an error (ASErrorDomain, code 700). Be prepared.

  • ⚠️ When the person picks a BLE accessory, the picker sends an event of type ASAccessoryEventType.accessoryChanged. The picker is supposed to sends an event of type ASAccessoryEventType.accessoryAdded, but I can't reproduce it at all.⚠️

  • If the device has been connected previously, it will be in the session.accessories array right after the session is activated.
    ⚠️ This device will not be discoverable by the Setup Picker until the user disconnects it from the settings. ⚠️

  • If the device has been connected by another app already, the picker will show the device as it was decorated by another app -> meaning the image and name will be from that app, not that you provide. To change the decoration the user should add the device to your app.

  • When the user selects the device using the picker:

    • The device will be displayed in the Accessories of the mobile App settings at Settings/Apps/YourApp.
    • The device will be displayed in the My Devices section at Settings/Bluetooth.
    • The device's info screen will display the image and name you provided to the ASPickerDisplayItem during the discovery process (the same that the user saw in the picker).
  • When the user deletes the app, the device will be disconnected automatically. It won't be displayed in the My Devices section of the Settings/Bluetooth screen anymore.

⚠️ The AccessorySetup does not work on the Simulator. ⚠️


📗 References