У меня есть InheritedWidget, обернутый в MaterialApp (root виджет).
// common.dart
import 'dart:async';
import 'package:flutter/widgets.dart';
class GlobalValues extends InheritedWidget {
StreamController controller;
@override
bool updateShouldNotify(InheritedWidget oldWidget) => true;
GlobalValues({Key key, Widget child}) : super(key: key, child: child);
static GlobalValues of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<GlobalValues>();
}
getFriends(AsyncSnapshot snapshot, BuildContext context) {
if (snapshot?.data == null) {
return [];
} else if (snapshot.data.containsKey('frindsList')) {
return snapshot.data['frindsList'];
}
}
getSocket(AsyncSnapshot snapshot, BuildContext context) {
if (snapshot?.data == null) {
return [];
} else if (snapshot.data.containsKey('connectedSocket')) {
return snapshot.data['connectedSocket'];
}
}
}
Теперь я добавляю поток в виджет A
socket.on('connect',(_){
ctrl.sink.add({"connectedSocket":socket});
});
В Widget AI есть еще один сценарий, в котором я добавляю другой поток
buttonPress(){
ctrl.sink.add({"frindsList":friends});
}
в Widget BI Я слушаю
Widget build(BuildContext context) {
return StreamBuilder(
stream: GlobalValues.of(context).controller.stream,
builder: (context, snapshot){
friends=GlobalValues.of(context).getFriends(snapshot, context);
return ListView.builder(
itemCount: friends.length,
itemBuilder:(context,i){
return buildFriendList(friends[i]);
});
});
}
в Widget C Я слушаю
StreamBuilder(
stream: GlobalValues.of(context).controller.stream,
builder: (context, snapshot){
var mySocket = GlobalValues.of(context).getSocket(snapshot, context);
return Text(mySocket.toString());
}
)
Но в c я всегда получаю ноль. Я новичок в флаттер и дартс. Похоже, что добавление нескольких потоков и их прослушивание - сложная задача. Кто-нибудь может мне помочь, пожалуйста?