inherited_stream
inherited_stream copied to clipboard
An inherited widget for Streams, which updates its dependencies when the stream emits data.
Inherited Stream
An InheritedWidget for Streams, which updates its dependencies when the Stream emits.
Usage
Create an InheritedStream
class ProgressModel extends InheritedStream<ValueStream<double>> {
const ProgressModel({
Key? key,
required ValueStream<double> stream,
required Widget child,
}) : super(key: key, stream: stream, child: child);
static double of(BuildContext context) {
return context
.dependOnInheritedWidgetOfExactType<ProgressModel>()!
.stream
.value!;
}
}
Insert into the Widget Tree
class _MyState extends State<MyPage> {
final _subject = BehaviorSubject<double>.seeded(0.0);
@override
void dispose() {
_subject.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: ProgressModel(
stream: _subject.stream,
child: Progress(),
),
floatingActionButton: FloatingActionButton(
onPressed: () => _subject.add(Random.nextDouble()),
),
);
}
}
Register Dependant(s)
class Progress extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CircularProgressIndicator(value: ProgressModel.of(context));
}
}