Ert*_*ıcı 0 sockets future stream dart flutter
我想在一个函数中执行这些操作:
1-连接套接字2-发送查询3-监听数据4-返回数据
但是当我尝试套接字时。即使我将await 放在listen 函数上,它也不会等待。它说这不是未来,而是一个 Stream 对象,但我对 Streams 不了解,所以我被困在这里。我怎样才能按照我说的去做呢?
static sendQuery({required String query,args, dimension}) async {
if(args != null)
args.forEach((element) => query = query.replaceFirst("?", element));
String ip = shared.getData("remote_ip");
int port = shared.getData("remote_port");
String data = "";
await Socket.connect(ip, port,timeout: Duration(seconds: 5)).then((soket) {
soket.write(query);
soket.listen((Uint8List buffer) async {
String _buffer = String.fromCharCodes(buffer);
data += _buffer;
},
onDone: () {});
});
print("Data has returned. Length of data: ${data.length}");
return data;}
Run Code Online (Sandbox Code Playgroud)
您正在awaiting 调用的结果Socket.listen,但返回 a StreamSubscription,而不是 a ,并且您只能在s 上Future使用。awaitFuture
但是,您可以用来StreamSubscription.asFuture创建一个在正常完成或出现错误时Future完成的任务。Stream
此外,同时使用.then()和是不一致的await。选一个; 使用await通常更简单:
var socket = await Socket.connect(ip, port, timeout: Duration(seconds: 5));
soket.write(query);
var subscription = soket.listen((Uint8List buffer) async {
String _buffer = String.fromCharCodes(buffer);
data += _buffer;
});
await subscription.asFuture<void>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2152 次 |
| 最近记录: |