实际上,我想从.txt文件中读取值,并通过Byte格式的蓝牙将它们发送到卡stm32。我尝试了这个解决方案,但没有正确发送值。我得到了这个例外:类型"Future"不是类型"List"的子类型
这是代码:
localPath() async {
String textasset = "assets/112936-bluetooth.txt";
String text = await rootBundle.loadString(textasset);
print(int.parse(text));
return int.parse(text);
}
这里是我调用函数的地方:
onWritePressed: () {
for (int i = 0; i < 4; i++)
c.write(localPath(), withoutResponse: true);
},
以下是.txt文件中某些值的示例:0x00、0xAA、0x00、0x03、0x2F、0x2F、0xCC、0xAA,0x00、0x00F、0x2A提前感谢的帮助
您正在将Future
而不是列表传递给方法write
。所以像这个一样更改你的代码
onWritePressed: () {
for (int i = 0; i < 4; i++){
localPath().then((val) => c.write(val, withoutResponse: true));
}
},
有关Future的更多信息,请访问Future.dev
localPath
函数返回Future,因为它是异步的。你需要等待它解决。此外,正如所写的那样,Future将解析为int
,而不是List<int>
,因此也需要修复。
Future<List<int>> localPath() async {
final textasset = "assets/112936-bluetooth.txt";
final text = await rootBundle.loadString(textasset);
final bytes = text //
.split(',')
.map((s) => s.trim())
.map((s) => int.parse(s))
.toList();
print(bytes);
return bytes;
}
然后在您的处理程序中:
onWritePressed: () async {
final bytes = await localPath();
for (int i = 0; i < 4; i++) {
c.write(bytes, withoutResponse: true);
}
},