main
1import 'dart:async';
2import 'dart:typed_data';
3
4import 'package:flutter/cupertino.dart';
5import 'package:flutter_blue_plus/flutter_blue_plus.dart';
6
7import 'fake_service.dart';
8
9class FakeDevice implements BluetoothDevice {
10 FakeDevice() {
11 Timer.periodic(Duration(seconds: 2), (timer) {
12 _connectedController.add(_connected ? BluetoothConnectionState.connected : BluetoothConnectionState.disconnected);
13 });
14 }
15
16 bool _connected = false;
17 StreamController<BluetoothConnectionState> _connectedController = StreamController.broadcast();
18
19
20 List<BluetoothService> _services = [
21 FakeBleBPService(),
22 ];
23
24 String _platformName = 'test device 1234';
25
26 AdvertisementData createFakeData() => AdvertisementData(
27 advName: advName,
28 txPowerLevel: null,
29 appearance: null,
30 connectable: true,
31 manufacturerData: {},
32 serviceData: {},
33 serviceUuids: [],
34 );
35
36 @override
37 String get advName => platformName;
38
39 @override
40 // TODO: implement bondState
41 Stream<BluetoothBondState> get bondState => throw UnimplementedError();
42
43 @override
44 void cancelWhenDisconnected(StreamSubscription subscription, {bool next = false, bool delayed = false}) {
45 // TODO: implement cancelWhenDisconnected
46 }
47
48 @override
49 Future<void> clearGattCache() {
50 // TODO: implement clearGattCache
51 throw UnimplementedError();
52 }
53
54 @override
55 Future<void> connect({Duration timeout = const Duration(seconds: 35), int? mtu = 512, bool autoConnect = false}) async {
56 print('CALLED CONNECT');
57 _connected = true;
58 final state = _connected
59 ? BluetoothConnectionState.connected
60 : BluetoothConnectionState.disconnected;
61 _connectedController.add(state);
62 }
63
64 @override
65 Stream<BluetoothConnectionState> get connectionState => _connectedController.stream;
66
67 @override
68 Future<void> createBond({int timeout = 90, Uint8List? pin}) {
69 // TODO: implement createBond
70 throw UnimplementedError();
71 }
72
73 @override
74 Future<void> disconnect({int timeout = 35, bool queue = true, int androidDelay = 2000,}) async {
75 print('CALLED DISCONNECT:');
76 debugPrintStack();
77 _connected = false;
78 final state = _connected
79 ? BluetoothConnectionState.connected
80 : BluetoothConnectionState.disconnected;
81 _connectedController.add(state);
82 }
83
84 @override
85 DisconnectReason? get disconnectReason => null;
86
87 @override
88 Future<List<BluetoothService>> discoverServices({bool subscribeToServicesChanged = true, int timeout = 15}) async {
89 assert(_connected);
90 return _services;
91 }
92
93 @override
94 // TODO: implement id
95 DeviceIdentifier get id => throw UnimplementedError();
96
97 @override
98 bool get isAutoConnectEnabled => false;
99
100 @override
101 bool get isConnected => _connected;
102
103 @override
104 bool get isDisconnected => !_connected;
105
106 @override
107 // TODO: implement isDiscoveringServices
108 Stream<bool> get isDiscoveringServices => throw UnimplementedError();
109
110 @override
111 // TODO: implement localName
112 String get localName => throw UnimplementedError();
113
114 @override
115 // TODO: implement mtu
116 Stream<int> get mtu => throw UnimplementedError();
117
118 @override
119 // TODO: implement mtuNow
120 int get mtuNow => throw UnimplementedError();
121
122 @override
123 // TODO: implement name
124 String get name => throw UnimplementedError();
125
126 @override
127 // TODO: implement onServicesReset
128 Stream<void> get onServicesReset => throw UnimplementedError();
129
130 @override
131 Future<void> pair() {
132 // TODO: implement pair
133 throw UnimplementedError();
134 }
135
136 @override
137 String get platformName => _platformName;
138
139 @override
140 // TODO: implement prevBondState
141 BluetoothBondState? get prevBondState => throw UnimplementedError();
142
143 @override
144 Future<int> readRssi({int timeout = 15}) {
145 // TODO: implement readRssi
146 throw UnimplementedError();
147 }
148
149 @override
150 // TODO: implement remoteId
151 DeviceIdentifier get remoteId => throw UnimplementedError();
152
153 @override
154 Future<void> removeBond({int timeout = 30}) {
155 // TODO: implement removeBond
156 throw UnimplementedError();
157 }
158
159 @override
160 Future<void> requestConnectionPriority({required ConnectionPriority connectionPriorityRequest}) {
161 // TODO: implement requestConnectionPriority
162 throw UnimplementedError();
163 }
164
165 @override
166 Future<int> requestMtu(int desiredMtu, {double predelay = 0.35, int timeout = 15}) {
167 // TODO: implement requestMtu
168 throw UnimplementedError();
169 }
170
171 @override
172 Stream<List<BluetoothService>> get services => Stream.value(_services);
173
174 @override
175 List<BluetoothService> get servicesList => _services;
176
177 @override
178 Stream<List<BluetoothService>> get servicesStream => Stream.value(_services);
179
180 @override
181 Future<void> setPreferredPhy({required int txPhy, required int rxPhy, required PhyCoding option}) {
182 // TODO: implement setPreferredPhy
183 throw UnimplementedError();
184 }
185
186 @override
187 Stream<BluetoothConnectionState> get state => connectionState;
188
189}