Флаттер, как сделать так, чтобы поток веб-сокетов транслировался на многие другие страницы - PullRequest
0 голосов
/ 23 мая 2018

У меня прослушивается поток веб-сокетов:

widget.channel.stream.listen((data) {
  print("!!!!new msg: $data");
  var dataJson = json.decode(data);
  print(dataJson["content"]);
  // do my job
  setState(() {
    _allAnimateMessages.insert(0, newMsg);
  });
  newMsg.animationController.forward();
});

Но при повторном входе на эту страницу произошла ошибка: Bad state: Stream has already been listened to.

Как сделать так, чтобы она передавалась идругие страницы могут получать эту трансляцию?

1 Ответ

0 голосов
/ 05 октября 2018

Поскольку нет полезного ответа, я обновляю свой ответ здесь для другой справки.

  1. Двойной поток подписки - желаемое поведение в флаттере.

, если выпросто используя StreamBuilder, поток можно прослушать только один раз.Подумайте об этом, если ваш поток может прослушивать множество других страниц или виджетов, то данные будут повторяться.

Но если вы хотите использовать один единственный поток и обновить все виджеты

это действительно может произойти при разработке сложного приложения, например, при создании приложения для чата, приходит новое сообщение, вы должны обновить много страниц пользовательского интерфейса (ваш диалог чата, ваш список сеансов ....), затем вы должны подписаться на эти потоки на многих страницах, Я все еще не нашел подходящий способ сделать это ,кроме как сделать этот поток для вещания, и делать свою работу.

...