我是飞镖新手。我正在尝试查找连接到wifi网络的电视的IP地址。为此,我先找到所有局域网IP地址,然后再对每个IP地址进行电视API调用。如果返回有效响应,则返回true。我的问题是lan ip地址列表列表总是空着。如果我对其进行硬编码以返回一些随机IP地址,则一切正常。我还可以看到找到的地址,因此它不应为空。
我尝试切换到静态列表,然后再切换到普通成员列表。得到相同的结果。
static getIpAdresses() async {
String ip = await Wifi.ip;
final String subnet = ip.substring(0, ip.lastIndexOf('.'));
final int port = 80;
List<String> lan = new List<String>() ;
final stream = NetworkAnalyzer.discover(subnet, port);
stream.listen((NetworkAddress addr) {
if (addr.exists) {
print('Found device: ${addr.ip} ');
lan.add(addr.ip.toString());
}
});
return lan;
}
使用Network.getIpAdresses().then(( resp) {}
时,我希望resp
包含局域网IP地址的列表。
答案 0 :(得分:1)
您的getIpAdresses
函数在流上注册一个回调,但是在返回本地lan
之前,它不等待从流中读取任何内容,该变量在时间仍然是一个空清单。
如果要等待完整读取流,则可以使用await for
来迭代流元素:
static getIpAdresses() async {
String ip = await Wifi.ip;
final String subnet = ip.substring(0, ip.lastIndexOf('.'));
final int port = 80;
List<String> lan = new List<String>() ;
final stream = NetworkAnalyzer.discover(subnet, port);
await for (var addr in stream) {
if (addr.exists) {
print('Found device: ${addr.ip} ');
lan.add(addr.ip.toString());
}
}
return lan;
}
有关使用Dart流和await for
的更多信息,请参见Asynchronous programming: streams。