Я просто работал над этой проблемой. Это было мое решение - оно попадает в категорию # 2:
class CurrencyStreamListener extends StatefulWidget {
final Stream<CurrencyNotification> notificationStream;
final Widget child;
CurrencyStreamListener({this.notificationStream, this.child});
@override
_CurrencyStreamListenerState createState() => _CurrencyStreamListenerState();
}
class _CurrencyStreamListenerState extends State<CurrencyStreamListener> {
@override
void initState() {
widget.notificationStream.listen((CurrencyNotification data) {
if (data is NotificationOfIncrease) {
Scaffold.of(context).showSnackBar(
SnackBar(
duration: Duration(seconds: 1),
content: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Earned Currency'),
],
),
),
);
}
});
super.initState();
}
@override
Widget build(BuildContext context) {
return widget.child;
}
}
Таким образом, я могу вкладывать этот виджет везде, где у меня есть доступ к потоку Blo c, поэтому, возможно, в каком-то классе Provider или Consumer ,