* feat: 调整插件接口

* feat: 增加 `Logger` 类

* fix: 部分参数改为可选参数

* fix: 调整接口

* fix: 重命名 AdvertiseData 为 Advertisement

* fix: 移除 `Logger.level` 属性

* fix: 适配 4.0.0

* fix: 更新依赖项

* fix: 优化导入方式

* fix: 修改版本号

* fix: 适配 4.0.0

* feat: 部分适配 4.0.0

* feat: 适配 4.0.0

* feat: 适配 4.0.0

* fix: 调整接口

* feat: 调整日志接口

* fix: 修复日志错误

* fix: 临时提交

* draft: 临时提交

* fix: 使用 log_service 插件替换 logging 插件

* fix: 更新 log_service 版本

* fix: 4.0.0

* feat: 4.0.0

* feat: 4.0.0
This commit is contained in:
iAMD
2023-10-30 18:06:14 +08:00
committed by GitHub
parent 3c10caa5dd
commit cfe0eda4a3
68 changed files with 1316 additions and 814 deletions

View File

@ -1,9 +1,11 @@
import 'package:bluetooth_low_energy_platform_interface/bluetooth_low_energy_platform_interface.dart';
import 'src/my_bluetooth_low_energy.dart';
import 'src/my_central_manager_2.dart';
import 'src/my_peripheral_manager_2.dart';
abstract class BluetoothLowEnergyDarwin {
static void registerWith() {
BluetoothLowEnergy.instance = MyBluetoothLowEnergy();
MyCentralManager.instance = MyCentralManager2();
MyPeripheralManager.instance = MyPeripheralManager2();
}
}

View File

@ -15,8 +15,8 @@ extension MyBluetoothLowEnergyStateArgsX on MyBluetoothLowEnergyStateArgs {
}
}
extension MyAdvertiseDataArgsX on MyAdvertiseDataArgs {
AdvertiseData toAdvertiseData() {
extension MyAdvertisementArgsX on MyAdvertisementArgs {
Advertisement toAdvertisement() {
final name = nameArgs;
final serviceUUIDs = serviceUUIDsArgs
.cast<String>()
@ -31,7 +31,7 @@ extension MyAdvertiseDataArgsX on MyAdvertiseDataArgs {
);
final manufacturerSpecificData =
manufacturerSpecificDataArgs?.toManufacturerSpecificData();
return AdvertiseData(
return Advertisement(
name: name,
serviceUUIDs: serviceUUIDs,
serviceData: serviceData,
@ -136,8 +136,8 @@ extension MyCentralArgsX on MyCentralArgs {
}
}
extension AdvertiseDataX on AdvertiseData {
MyAdvertiseDataArgs toArgs() {
extension AdvertisementX on Advertisement {
MyAdvertisementArgs toArgs() {
final nameArgs = name;
final serviceUUIDsArgs =
serviceUUIDs.map((uuid) => uuid.toString()).toList();
@ -147,7 +147,7 @@ extension AdvertiseDataX on AdvertiseData {
return MapEntry(uuidArgs, dataArgs);
});
final manufacturerSpecificDataArgs = manufacturerSpecificData?.toArgs();
return MyAdvertiseDataArgs(
return MyAdvertisementArgs(
nameArgs: nameArgs,
serviceUUIDsArgs: serviceUUIDsArgs,
serviceDataArgs: serviceDataArgs,

View File

@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v11.0.1), do not edit directly.
// Autogenerated from Pigeon (v12.0.1), do not edit directly.
// See also: https://pub.dev/packages/pigeon
// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
@ -7,6 +7,15 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;
import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer;
import 'package:flutter/services.dart';
List<Object?> wrapResponse({Object? result, PlatformException? error, bool empty = false}) {
if (empty) {
return <Object?>[];
}
if (error == null) {
return <Object?>[result];
}
return <Object?>[error.code, error.message, error.details];
}
enum MyBluetoothLowEnergyStateArgs {
unknown,
@ -123,8 +132,8 @@ class MyPeripheralArgs {
}
}
class MyAdvertiseDataArgs {
MyAdvertiseDataArgs({
class MyAdvertisementArgs {
MyAdvertisementArgs({
this.nameArgs,
required this.serviceUUIDsArgs,
required this.serviceDataArgs,
@ -148,9 +157,9 @@ class MyAdvertiseDataArgs {
];
}
static MyAdvertiseDataArgs decode(Object result) {
static MyAdvertisementArgs decode(Object result) {
result as List<Object?>;
return MyAdvertiseDataArgs(
return MyAdvertisementArgs(
nameArgs: result[0] as String?,
serviceUUIDsArgs: (result[1] as List<Object?>?)!.cast<String?>(),
serviceDataArgs: (result[2] as Map<Object?, Object?>?)!.cast<String?, Uint8List?>(),
@ -654,7 +663,7 @@ class _MyCentralManagerFlutterApiCodec extends StandardMessageCodec {
const _MyCentralManagerFlutterApiCodec();
@override
void writeValue(WriteBuffer buffer, Object? value) {
if (value is MyAdvertiseDataArgs) {
if (value is MyAdvertisementArgs) {
buffer.putUint8(128);
writeValue(buffer, value.encode());
} else if (value is MyGattCharacteristicArgs) {
@ -678,7 +687,7 @@ class _MyCentralManagerFlutterApiCodec extends StandardMessageCodec {
Object? readValueOfType(int type, ReadBuffer buffer) {
switch (type) {
case 128:
return MyAdvertiseDataArgs.decode(readValue(buffer)!);
return MyAdvertisementArgs.decode(readValue(buffer)!);
case 129:
return MyGattCharacteristicArgs.decode(readValue(buffer)!);
case 130:
@ -698,7 +707,7 @@ abstract class MyCentralManagerFlutterApi {
void onStateChanged(int stateNumberArgs);
void onDiscovered(MyPeripheralArgs peripheralArgs, int rssiArgs, MyAdvertiseDataArgs advertiseDataArgs);
void onDiscovered(MyPeripheralArgs peripheralArgs, int rssiArgs, MyAdvertisementArgs advertisementArgs);
void onPeripheralStateChanged(MyPeripheralArgs peripheralArgs, bool stateArgs);
@ -719,8 +728,14 @@ abstract class MyCentralManagerFlutterApi {
final int? arg_stateNumberArgs = (args[0] as int?);
assert(arg_stateNumberArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyCentralManagerFlutterApi.onStateChanged was null, expected non-null int.');
api.onStateChanged(arg_stateNumberArgs!);
return;
try {
api.onStateChanged(arg_stateNumberArgs!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
@ -741,11 +756,17 @@ abstract class MyCentralManagerFlutterApi {
final int? arg_rssiArgs = (args[1] as int?);
assert(arg_rssiArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyCentralManagerFlutterApi.onDiscovered was null, expected non-null int.');
final MyAdvertiseDataArgs? arg_advertiseDataArgs = (args[2] as MyAdvertiseDataArgs?);
assert(arg_advertiseDataArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyCentralManagerFlutterApi.onDiscovered was null, expected non-null MyAdvertiseDataArgs.');
api.onDiscovered(arg_peripheralArgs!, arg_rssiArgs!, arg_advertiseDataArgs!);
return;
final MyAdvertisementArgs? arg_advertisementArgs = (args[2] as MyAdvertisementArgs?);
assert(arg_advertisementArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyCentralManagerFlutterApi.onDiscovered was null, expected non-null MyAdvertisementArgs.');
try {
api.onDiscovered(arg_peripheralArgs!, arg_rssiArgs!, arg_advertisementArgs!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
@ -766,8 +787,14 @@ abstract class MyCentralManagerFlutterApi {
final bool? arg_stateArgs = (args[1] as bool?);
assert(arg_stateArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyCentralManagerFlutterApi.onPeripheralStateChanged was null, expected non-null bool.');
api.onPeripheralStateChanged(arg_peripheralArgs!, arg_stateArgs!);
return;
try {
api.onPeripheralStateChanged(arg_peripheralArgs!, arg_stateArgs!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
@ -788,8 +815,14 @@ abstract class MyCentralManagerFlutterApi {
final Uint8List? arg_valueArgs = (args[1] as Uint8List?);
assert(arg_valueArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyCentralManagerFlutterApi.onCharacteristicValueChanged was null, expected non-null Uint8List.');
api.onCharacteristicValueChanged(arg_characteristicArgs!, arg_valueArgs!);
return;
try {
api.onCharacteristicValueChanged(arg_characteristicArgs!, arg_valueArgs!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
@ -800,7 +833,7 @@ class _MyPeripheralManagerHostApiCodec extends StandardMessageCodec {
const _MyPeripheralManagerHostApiCodec();
@override
void writeValue(WriteBuffer buffer, Object? value) {
if (value is MyAdvertiseDataArgs) {
if (value is MyAdvertisementArgs) {
buffer.putUint8(128);
writeValue(buffer, value.encode());
} else if (value is MyGattCharacteristicArgs) {
@ -827,7 +860,7 @@ class _MyPeripheralManagerHostApiCodec extends StandardMessageCodec {
Object? readValueOfType(int type, ReadBuffer buffer) {
switch (type) {
case 128:
return MyAdvertiseDataArgs.decode(readValue(buffer)!);
return MyAdvertisementArgs.decode(readValue(buffer)!);
case 129:
return MyGattCharacteristicArgs.decode(readValue(buffer)!);
case 130:
@ -947,12 +980,12 @@ class MyPeripheralManagerHostApi {
}
}
Future<void> startAdvertising(MyAdvertiseDataArgs arg_advertiseDataArgs) async {
Future<void> startAdvertising(MyAdvertisementArgs arg_advertisementArgs) async {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.bluetooth_low_energy_darwin.MyPeripheralManagerHostApi.startAdvertising', codec,
binaryMessenger: _binaryMessenger);
final List<Object?>? replyList =
await channel.send(<Object?>[arg_advertiseDataArgs]) as List<Object?>?;
await channel.send(<Object?>[arg_advertisementArgs]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
@ -1144,8 +1177,14 @@ abstract class MyPeripheralManagerFlutterApi {
final int? arg_stateNumberArgs = (args[0] as int?);
assert(arg_stateNumberArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyPeripheralManagerFlutterApi.onStateChanged was null, expected non-null int.');
api.onStateChanged(arg_stateNumberArgs!);
return;
try {
api.onStateChanged(arg_stateNumberArgs!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
@ -1172,8 +1211,14 @@ abstract class MyPeripheralManagerFlutterApi {
final int? arg_offsetArgs = (args[3] as int?);
assert(arg_offsetArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyPeripheralManagerFlutterApi.onReadCharacteristicCommandReceived was null, expected non-null int.');
api.onReadCharacteristicCommandReceived(arg_centralArgs!, arg_characteristicArgs!, arg_idArgs!, arg_offsetArgs!);
return;
try {
api.onReadCharacteristicCommandReceived(arg_centralArgs!, arg_characteristicArgs!, arg_idArgs!, arg_offsetArgs!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
@ -1203,8 +1248,14 @@ abstract class MyPeripheralManagerFlutterApi {
final Uint8List? arg_valueArgs = (args[4] as Uint8List?);
assert(arg_valueArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyPeripheralManagerFlutterApi.onWriteCharacteristicCommandReceived was null, expected non-null Uint8List.');
api.onWriteCharacteristicCommandReceived(arg_centralArgs!, arg_characteristicArgs!, arg_idArgs!, arg_offsetArgs!, arg_valueArgs!);
return;
try {
api.onWriteCharacteristicCommandReceived(arg_centralArgs!, arg_characteristicArgs!, arg_idArgs!, arg_offsetArgs!, arg_valueArgs!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}
@ -1228,8 +1279,14 @@ abstract class MyPeripheralManagerFlutterApi {
final bool? arg_stateArgs = (args[2] as bool?);
assert(arg_stateArgs != null,
'Argument for dev.flutter.pigeon.bluetooth_low_energy_darwin.MyPeripheralManagerFlutterApi.onNotifyCharacteristicCommandReceived was null, expected non-null bool.');
api.onNotifyCharacteristicCommandReceived(arg_centralArgs!, arg_characteristicArgs!, arg_stateArgs!);
return;
try {
api.onNotifyCharacteristicCommandReceived(arg_centralArgs!, arg_characteristicArgs!, arg_stateArgs!);
return wrapResponse(empty: true);
} on PlatformException catch (e) {
return wrapResponse(error: e);
} catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString()));
}
});
}
}

View File

@ -1,15 +0,0 @@
import 'package:bluetooth_low_energy_platform_interface/bluetooth_low_energy_platform_interface.dart';
import 'my_central_manager.dart';
import 'my_peripheral_manager.dart';
class MyBluetoothLowEnergy extends BluetoothLowEnergy {
@override
final MyCentralManager centralManager;
@override
final MyPeripheralManager peripheralManager;
MyBluetoothLowEnergy()
: centralManager = MyCentralManager(),
peripheralManager = MyPeripheralManager();
}

View File

@ -1,39 +0,0 @@
import 'dart:async';
import 'package:bluetooth_low_energy_platform_interface/bluetooth_low_energy_platform_interface.dart';
import 'package:flutter/foundation.dart';
abstract class MyBluetoothLowEnergyManager extends BluetoothLowEnergyManager {
MyBluetoothLowEnergyManager()
: _state = BluetoothLowEnergyState.unknown,
_stateChangedController = StreamController.broadcast();
final StreamController<BluetoothLowEnergyStateChangedEventArgs>
_stateChangedController;
BluetoothLowEnergyState _state;
@override
BluetoothLowEnergyState get state => _state;
@protected
set state(BluetoothLowEnergyState value) {
if (_state == value) {
return;
}
_state = value;
final eventArgs = BluetoothLowEnergyStateChangedEventArgs(state);
_stateChangedController.add(eventArgs);
}
@override
Stream<BluetoothLowEnergyStateChangedEventArgs> get stateChanged =>
_stateChangedController.stream;
@protected
Future<void> throwWithoutState(BluetoothLowEnergyState state) async {
if (this.state != state) {
throw BluetoothLowEnergyError(
'$state is expected, but current state is ${this.state}.',
);
}
}
}

View File

@ -1,28 +1,47 @@
import 'dart:async';
import 'dart:typed_data';
import 'package:bluetooth_low_energy_platform_interface/bluetooth_low_energy_platform_interface.dart';
import 'package:flutter/foundation.dart';
import 'my_api.dart';
import 'my_bluetooth_low_energy_manager.dart';
import 'my_gatt_characteristic2.dart';
import 'my_gatt_descriptor2.dart';
class MyCentralManager extends MyBluetoothLowEnergyManager
implements CentralManager, MyCentralManagerFlutterApi {
MyCentralManager()
: _api = MyCentralManagerHostApi(),
_discoveredController = StreamController.broadcast(),
_peripheralStateChangedController = StreamController.broadcast(),
_characteristicValueChangedController = StreamController.broadcast();
class MyCentralManager2 extends MyCentralManager
implements MyCentralManagerFlutterApi {
final MyCentralManagerHostApi _api;
BluetoothLowEnergyState _state;
final StreamController<BluetoothLowEnergyStateChangedEventArgs>
_stateChangedController;
final StreamController<DiscoveredEventArgs> _discoveredController;
final StreamController<PeripheralStateChangedEventArgs>
_peripheralStateChangedController;
final StreamController<GattCharacteristicValueChangedEventArgs>
_characteristicValueChangedController;
MyCentralManager2()
: _api = MyCentralManagerHostApi(),
_state = BluetoothLowEnergyState.unknown,
_stateChangedController = StreamController.broadcast(),
_discoveredController = StreamController.broadcast(),
_peripheralStateChangedController = StreamController.broadcast(),
_characteristicValueChangedController = StreamController.broadcast();
@override
BluetoothLowEnergyState get state => _state;
@protected
set state(BluetoothLowEnergyState value) {
if (_state == value) {
return;
}
_state = value;
final eventArgs = BluetoothLowEnergyStateChangedEventArgs(state);
_stateChangedController.add(eventArgs);
}
@override
Stream<BluetoothLowEnergyStateChangedEventArgs> get stateChanged =>
_stateChangedController.stream;
@override
Stream<DiscoveredEventArgs> get discovered => _discoveredController.stream;
@override
@ -33,9 +52,15 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
get characteristicValueChanged =>
_characteristicValueChangedController.stream;
Future<void> _throwWithoutState(BluetoothLowEnergyState state) async {
if (this.state != state) {
throw StateError(
'$state is expected, but current state is ${this.state}.');
}
}
@override
Future<void> setUp() async {
await throwWithoutState(BluetoothLowEnergyState.unknown);
final args = await _api.setUp();
final stateArgs =
MyBluetoothLowEnergyStateArgs.values[args.stateNumberArgs];
@ -45,26 +70,26 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
@override
Future<void> startDiscovery() async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _api.startDiscovery();
}
@override
Future<void> stopDiscovery() async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _api.stopDiscovery();
}
@override
Future<void> connect(Peripheral peripheral) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final peripheralHashCodeArgs = peripheral.hashCode;
await _api.connect(peripheralHashCodeArgs);
}
@override
Future<void> disconnect(Peripheral peripheral) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final peripheralHashCodeArgs = peripheral.hashCode;
await _api.disconnect(peripheralHashCodeArgs);
}
@ -74,7 +99,7 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
Peripheral peripheral, {
required GattCharacteristicWriteType type,
}) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final peripheralHashCodeArgs = peripheral.hashCode;
final typeArgs = type.toArgs();
final typeNumberArgs = typeArgs.index;
@ -87,7 +112,7 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
@override
Future<int> readRSSI(Peripheral peripheral) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final peripheralHashCodeArgs = peripheral.hashCode;
final rssi = await _api.readRSSI(peripheralHashCodeArgs);
return rssi;
@ -95,7 +120,7 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
@override
Future<List<GattService>> discoverGATT(Peripheral peripheral) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
if (peripheral is! MyPeripheral) {
throw TypeError();
}
@ -121,7 +146,7 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
Future<Uint8List> readCharacteristic(
GattCharacteristic characteristic,
) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
if (characteristic is! MyGattCharacteristic2) {
throw TypeError();
}
@ -142,7 +167,7 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
required Uint8List value,
required GattCharacteristicWriteType type,
}) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
if (characteristic is! MyGattCharacteristic2) {
throw TypeError();
}
@ -166,7 +191,7 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
GattCharacteristic characteristic, {
required bool state,
}) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
if (characteristic is! MyGattCharacteristic2) {
throw TypeError();
}
@ -184,7 +209,7 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
@override
Future<Uint8List> readDescriptor(GattDescriptor descriptor) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
if (descriptor is! MyGattDescriptor2) {
throw TypeError();
}
@ -205,7 +230,7 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
GattDescriptor descriptor, {
required Uint8List value,
}) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
if (descriptor is! MyGattDescriptor2) {
throw TypeError();
}
@ -232,15 +257,15 @@ class MyCentralManager extends MyBluetoothLowEnergyManager
void onDiscovered(
MyPeripheralArgs peripheralArgs,
int rssiArgs,
MyAdvertiseDataArgs advertiseDataArgs,
MyAdvertisementArgs advertisementArgs,
) {
final peripheral = peripheralArgs.toPeripheral();
final rssi = rssiArgs;
final advertiseData = advertiseDataArgs.toAdvertiseData();
final advertisement = advertisementArgs.toAdvertisement();
final eventArgs = DiscoveredEventArgs(
peripheral,
rssi,
advertiseData,
advertisement,
);
_discoveredController.add(eventArgs);
}

View File

@ -1,14 +1,16 @@
import 'dart:async';
import 'dart:typed_data';
import 'package:bluetooth_low_energy_platform_interface/bluetooth_low_energy_platform_interface.dart';
import 'package:flutter/foundation.dart';
import 'my_api.dart';
import 'my_bluetooth_low_energy_manager.dart';
class MyPeripheralManager extends MyBluetoothLowEnergyManager
implements PeripheralManager, MyPeripheralManagerFlutterApi {
class MyPeripheralManager2 extends MyPeripheralManager
implements MyPeripheralManagerFlutterApi {
final MyPeripheralManagerHostApi _api;
BluetoothLowEnergyState _state;
final StreamController<BluetoothLowEnergyStateChangedEventArgs>
_stateChangedController;
final StreamController<ReadGattCharacteristicCommandEventArgs>
_readCharacteristicCommandReceivedController;
final StreamController<WriteGattCharacteristicCommandEventArgs>
@ -16,8 +18,10 @@ class MyPeripheralManager extends MyBluetoothLowEnergyManager
final StreamController<NotifyGattCharacteristicCommandEventArgs>
_notifyCharacteristicCommandReceivedController;
MyPeripheralManager()
MyPeripheralManager2()
: _api = MyPeripheralManagerHostApi(),
_state = BluetoothLowEnergyState.unknown,
_stateChangedController = StreamController.broadcast(),
_readCharacteristicCommandReceivedController =
StreamController.broadcast(),
_writeCharacteristicCommandReceivedController =
@ -26,20 +30,40 @@ class MyPeripheralManager extends MyBluetoothLowEnergyManager
StreamController.broadcast();
@override
BluetoothLowEnergyState get state => _state;
@protected
set state(BluetoothLowEnergyState value) {
if (_state == value) {
return;
}
_state = value;
final eventArgs = BluetoothLowEnergyStateChangedEventArgs(state);
_stateChangedController.add(eventArgs);
}
@override
Stream<BluetoothLowEnergyStateChangedEventArgs> get stateChanged =>
_stateChangedController.stream;
@override
Stream<ReadGattCharacteristicCommandEventArgs>
get readCharacteristicCommandReceived =>
_readCharacteristicCommandReceivedController.stream;
@override
Stream<WriteGattCharacteristicCommandEventArgs>
get writeCharacteristicCommandReceived =>
_writeCharacteristicCommandReceivedController.stream;
@override
Stream<NotifyGattCharacteristicCommandEventArgs>
get notifyCharacteristicCommandReceived =>
_notifyCharacteristicCommandReceivedController.stream;
Future<void> _throwWithoutState(BluetoothLowEnergyState state) async {
if (this.state != state) {
throw StateError(
'$state is expected, but current state is ${this.state}.');
}
}
@override
Future<void> setUp() async {
final args = await _api.setUp();
@ -51,7 +75,7 @@ class MyPeripheralManager extends MyBluetoothLowEnergyManager
@override
Future<void> addService(GattService service) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
if (service is! MyGattService) {
throw TypeError();
}
@ -61,33 +85,33 @@ class MyPeripheralManager extends MyBluetoothLowEnergyManager
@override
Future<void> removeService(GattService service) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final serviceHashCodeArgs = service.hashCode;
await _api.removeService(serviceHashCodeArgs);
}
@override
Future<void> clearServices() async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _api.clearServices();
}
@override
Future<void> startAdvertising(AdvertiseData advertiseData) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
final advertiseDataArgs = advertiseData.toArgs();
await _api.startAdvertising(advertiseDataArgs);
Future<void> startAdvertising(Advertisement advertisement) async {
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final advertisementArgs = advertisement.toArgs();
await _api.startAdvertising(advertisementArgs);
}
@override
Future<void> stopAdvertising() async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _api.stopAdvertising();
}
@override
Future<int> getMaximumWriteLength(Central central) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final centralHashCodeArgs = central.hashCode;
final maximumWriteLength =
await _api.getMaximumWriteLength(centralHashCodeArgs);
@ -96,14 +120,14 @@ class MyPeripheralManager extends MyBluetoothLowEnergyManager
@override
Future<void> sendReadCharacteristicReply(
Central central,
GattCharacteristic characteristic,
int id,
int offset,
bool status,
Uint8List value,
) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
Central central, {
required GattCharacteristic characteristic,
required int id,
required int offset,
required bool status,
required Uint8List value,
}) async {
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final centralHashCodeArgs = central.hashCode;
final characteristicHashCodeArgs = characteristic.hashCode;
final idArgs = id;
@ -122,13 +146,13 @@ class MyPeripheralManager extends MyBluetoothLowEnergyManager
@override
Future<void> sendWriteCharacteristicReply(
Central central,
GattCharacteristic characteristic,
int id,
int offset,
bool status,
) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
Central central, {
required GattCharacteristic characteristic,
required int id,
required int offset,
required bool status,
}) async {
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final centralHashCodeArgs = central.hashCode;
final characteristicHashCodeArgs = characteristic.hashCode;
final idArgs = id;
@ -145,11 +169,11 @@ class MyPeripheralManager extends MyBluetoothLowEnergyManager
@override
Future<void> notifyCharacteristicValueChanged(
Central central,
GattCharacteristic characteristic,
Uint8List value,
) async {
await throwWithoutState(BluetoothLowEnergyState.poweredOn);
Central central, {
required GattCharacteristic characteristic,
required Uint8List value,
}) async {
await _throwWithoutState(BluetoothLowEnergyState.poweredOn);
final centralHashCodeArgs = central.hashCode;
final characteristicHashCodeArgs = characteristic.hashCode;
final valueArgs = value;