У меня есть 2 StreamBuilder
внутри ListView
, которые слушают то же самое Stream
, то есть valueStream
. Внутри этого StreamBuilder
у меня есть SwitchListTile
, который добавляет новое значение к valueStream
.
Это мой Stream
:
Observable<bool> get valueStream => valueController.stream;
Это мой ListView
:
ListView(
children: <Widget>[
Switch1(key: UniqueKey(),),
Switch2(key: UniqueKey(),),
],
),
Это Switch1
виджет:
class Switch1 extends StatefulWidget {
const Switch1(
{@required Key key})
: super(key: key);
@override
_Switch1State createState() => _Switch1State();
}
class _Switch1State extends State<Switch1> {
DummyBloc _dummyBloc;
@override
Widget build(BuildContext context) {
return StreamBuilder(
key: UniqueKey(),
stream: _dummyBloc.valueStream,
builder: (context, AsyncSnapshot<bool> snapshot) {
print('rebuild Switch1');
if(!snapshot.hasData) return Container();
return SwitchListTile(
value: snapshot.data,
onChanged: _dummyBloc.updateValue,
);
},
);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
_dummyBloc = DummyBloc();
}
}
Это Switch2
виджет:
class Switch2 extends StatefulWidget {
const Switch2(
{@required Key key})
: super(key: key);
@override
_Switch2State createState() => _Switch2State();
}
class _Switch2State extends State<Switch2> {
DummyBloc _dummyBloc;
@override
Widget build(BuildContext context) {
return StreamBuilder(
key: UniqueKey(),
stream: _dummyBloc.valueStream,
builder: (context, AsyncSnapshot<bool> snapshot) {
print('rebuild Switch2');
if(!snapshot.hasData) return Container();
return SwitchListTile(
activeColor: Theme.of(context).buttonColor,
value: snapshot.data,
onChanged: _dummyBloc.updateValue,
);
},
);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
_dummyBloc = DummyBloc();
}
}
Если я коснусь виджета Switch1
, StreamBuilder
внутри Switch2
якобы перестроится, и наоборот, но этого не произошло. Я пытался добавить UniqueKey
к Switch1
и Switch2
, но это не помогает. Любое предложение, как сделать эту работу?