Флаттер синий json значение обрезается - PullRequest
1 голос
/ 17 июня 2020

Я использую этот код для подписки на переменную 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

1 Ответ

0 голосов
/ 18 июня 2020

Мне пришлось увеличить MTU с помощью await device.requestMtu(512);

Спасибо: https://github.com/pauldemarco/flutter_blue/issues/611#issuecomment -645972227

...