Я использую этот код для подписки на переменную bluetooth.
flutterBlue.startScan(timeout: Duration(seconds: 4));
// Listen to scan results
flutterBlue.scanResults.listen((results) async {
// do something with scan results
for (ScanResult r in results) {
print('${r.device.name} found! rssi: ${r.rssi}');
if(r.device.name == kArduinoDeviceName){
await r.device.connect();
List<BluetoothService> services = await r.device.discoverServices();
services.forEach((service) {
if (service.uuid.toString() == kServiceUuid) {
service.characteristics.forEach((characteristic) async {
if (characteristic.uuid.toString() == CHARACTERISTIC_UUID) {
await characteristic.setNotifyValue(true);
characteristic.value.listen((value) {
print("received value: " + value.toString());
String receivedStr = ascii.decode(value);
print("receivedStr: " + receivedStr);
try {
Map<String, dynamic> jsonData = jsonDecode(receivedStr);
handleData(jsonData);
} catch(e){
print(e);
}
});
}
});
}
});
}
}
});
flutterBlue.stopScan();
Проблема в том, что я не получаю полное значение json. Он обрезан на 21. символе. Я проверил с помощью другого приложения, что это значение действительно правильное, и проблема в этом characteristic.value.listen((value) {
. Результат:
I/flutter ( 6585): received value: [123, 34, 107, 109, 112, 104, 34, 58, 49, 49, 54, 44, 34, 114, 112, 109, 34, 58, 53, 56]
I/flutter ( 6585): receivedStr: {"kmph":116,"rpm":58
I/flutter ( 6585): FormatException: Unexpected end of input (at character 21)
I/flutter ( 6585): {"kmph":116,"rpm":58