Flutter - передача данных между виджетами с отслеживанием состояния в сокетном соединении - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в флаттере, и я работаю с сокетами, которые продолжают передавать данные, которые мне нужно обновить на панели приложений. Итак, у меня есть виджеты с отслеживанием состояния

class _HomePageState extends State<HomePage> {
TickerAppBar appBar = TickerAppBar();
//Some declarations

@override
  void initState() {
    // TODO: implement initState
    super.initState();
    connectionSetup();
  }


connectionSetup() async {
    this.socket.connect(connectionString);
    this.socket.sendSubscription(subscriptionString);
    await processData();
}

Future<Null> processData() async{
    subscription = socket.streamController.stream.listen(
        (data) {
         appBar.setStreamData(data); //Passing data into appbar widget
         //rest of the code of current widget
         }
     );
}

@override
  Widget build(BuildContext context) {

    return Scaffold(
        appBar: appBar,
        //rest of the code
    )
}

}

class TickerAppBar extends StatefulWidget implements PreferredSizeWidget  {
String streamData;
_TickerAppBarState child = _TickerAppBarState();

setStreamData(data){
    this.streamData = data;
    child.processData(); //To invoke the function every time the data is passed 
  }
}

class _TickerAppBarState extends State<TickerAppBar>{

Future<String> processData() async{
//Cannot set state here since its a constructor and the widget is not mounted.
}

}

Итак, как я могу устанавливать данные каждый раз, когда данные передаются в tickerappbar? так что моя пользовательская панель приложений отображает новые данные, которые появляются каждую секунду.

1 Ответ

0 голосов
/ 29 мая 2020

Я бы посоветовал вам следовать шаблону BLo C, в котором вы можете определять свои потоки в одном месте и подписываться на указанный поток из любого виджета, как только у вас будут готовы данные, вы можете писать в поток, и он будет доступен для всех виджетов, на которые подписана подписка.

...