未来 returns 空列表

Future returns empty list

我是飞镖新手。我正在尝试查找连接到 wifi 网络的电视的 IP 地址。我这样做是首先找到所有的局域网 IP 地址,然后对每个 IP 地址进行电视 api 调用。如果我得到有效回复,则 returned 为 true。我的问题是 lan ip 地址列表列表总是空的。如果我将它硬编码为 return 一些随机 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 包含 LAN IP 地址列表。

您的 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