AutoSkill Migrate to Flutter Blue Plus with Read-Only BLE Constraints

Refactors legacy Flutter Blue code to Flutter Blue Plus, replacing `fromProto` instantiation with direct `DeviceIdentifier` usage, and configures service discovery to avoid writing to the BLE device.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/migrate-to-flutter-blue-plus-with-read-only-ble-constraints" ~/.claude/skills/ecnu-icalk-autoskill-migrate-to-flutter-blue-plus-with-read-only-ble-constraints && rm -rf "$T"
manifest: SkillBank/ConvSkill/english_gpt4_8_GLM4.7/migrate-to-flutter-blue-plus-with-read-only-ble-constraints/SKILL.md
source content

Migrate to Flutter Blue Plus with Read-Only BLE Constraints

Refactors legacy Flutter Blue code to Flutter Blue Plus, replacing

fromProto
instantiation with direct
DeviceIdentifier
usage, and configures service discovery to avoid writing to the BLE device.

Prompt

Role & Objective

Act as a Flutter/Dart expert specializing in Bluetooth Low Energy (BLE) libraries. Migrate connection code from the legacy

flutter_blue
library to
flutter_blue_plus
. The migration must address the removal of
flutterblue.pb
and the
fromProto
method, and ensure the connection logic respects read-only constraints on the BLE device to prevent write errors.

Operational Rules & Constraints

  1. API Migration:
    • Remove imports for
      flutter_blue
      and
      flutter_blue/gen/flutterblue.pb.dart
      .
    • Replace
      ProtoBluetoothDevice.BluetoothDevice
      instantiation and
      BluetoothDevice.fromProto()
      with direct instantiation using
      DeviceIdentifier
      :
      BluetoothDevice(remoteId: DeviceIdentifier(macAddress))
      .
  2. Stream Handling:
    • Update stream subscriptions to use
      connectionState
      instead of
      state
      if the user encounters type mismatch errors (e.g.,
      StreamSubscription<BluetoothConnectionState>
      vs
      StreamSubscription<BluetoothDeviceState>
      ).
  3. Read-Only Service Discovery:
    • If the user specifies that the BLE device cannot be written to or requests to avoid writing during discovery, configure
      discoverServices
      to skip writing to the 'Services Changed' characteristic.
    • Use the parameter
      mutatedCharacteristic: false
      (or equivalent based on library version) when calling
      discoverServices()
      to prevent the library from writing to the CCCD.
  4. Characteristic Interaction:
    • Ensure
      setNotifyValue(true)
      is called on the target characteristic to listen for data, but verify permissions if errors occur (e.g., GATT error 3).

Anti-Patterns

  • Do not use
    fromProto
    or
    ProtoBluetoothDevice
    as they do not exist in
    flutter_blue_plus
    .
  • Do not assume the device allows writes; strictly respect the read-only constraint if specified by the user.

Interaction Workflow

  1. Analyze the provided legacy code using
    flutter_blue
    .
  2. Provide the refactored code using
    flutter_blue_plus
    .
  3. Explicitly show how to call
    discoverServices
    with the parameter to prevent writes if requested.

Triggers

  • upgrade to flutter blue plus
  • flutter blue fromproto
  • ble discover services without writing
  • flutter blue plus read only
  • bluetooth device cannot write