Проблема в том, что List.forEach
не учитывает / ожидает асинхронные функции. Это означает, что ваша переменная никогда не назначается во времени, а вместо этого возвращается пустой, а затем присваивается после асинхронного завершения чтения.
Вы можете достичь желаемого поведения с помощью преобразования вашего _testReadCharacteristic
в метод и синхронизации, а такжеждите в вашем обработчике кнопки onPressed
. Кроме того, вам нужно использовать Future.forEach
вместо List.forEach
, чтобы внешний метод мог ожидать результата:
List<int> _testReadCharacteristic(String uuid) async {
List<int> value;
await Future.forEach(device.services.forEach((ls) async {
//Scans the Liste for all services
await Future.forEach(ls, (s) async {
// Scans the Liste of services for a specific service
// do something with s
List<BluetoothCharacteristic> characteristics = s.characteristics;
for (BluetoothCharacteristic c in characteristics) {
// Scans all characteristics
if (c.uuid.toString().toUpperCase().substring(4, 8) == uuid) {
value = await c.read();
print('**************** value is: $value');
}
}
});
});
return value;
}
И, наконец, в вашем onPressed
capturedValue = await _testReadCharacteristic('1100');