Будущее возвращает пустой список - PullRequest
0 голосов
/ 29 июня 2019

Я новичок в дартс.Я пытаюсь найти IP-адрес телевизора, подключенного к сети Wi-Fi.Я делаю это, сначала находя все IP-адреса локальной сети, а затем делаю вызов API TV на каждый из IP-адресов.Если я получу верный ответ, вернется true.Моя проблема в том, что список списков адресов локальной сети всегда пуст.Если я жестко закодирую его, чтобы вернуть несколько случайных 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-адресов локальной сети.

1 Ответ

1 голос
/ 30 июня 2019

Ваша getIpAdresses функция регистрирует обратный вызов в потоке, но не ждет , чтобы прочитать что-либо из потока, прежде чем вернуть локальную переменную lan, которая в данный момент все еще пустаlist.

Если вы хотите подождать, чтобы прочитать поток целиком, вы можете использовать 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.

...