全局侦听器小部件

时间:2020-12-28 09:22:15

标签: flutter

我在 Flutter 应用程序中有一个 MyListener 小部件,如下所示

class MyListener extends StatefulWidget {
  final Stream<ApiEvent> stream;

  const MyListener({
    @required this.stream,
  }) : assert(stream != null);

  @override
  _MyListenerState createState() => _MyListenerState();
}

class _MyListenerState extends State<MyListener> {
  StreamSubscription<MyEvent> eventSubscription;

  @override
  void initState() {
    super.initState();
    eventSubscription = stream.listen(onMyEvent);
  }

  @override
  void dispose() {
    eventSubscription.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }

  void onMyEvent(MyEvent event) {
    // Do something
  }
}

我想将 MyListener 小部件 一次 作为 MaterialApp 的孙子放入小部件树中,我的 MaterialApp 有很多 routes 和我不想在所有 MyListener 中添加 routes 我只想在我的小部件树中有一个 MyListener 来收听我的流并做一些事情,例如显示小吃店、到某个地方的路线、关闭应用程序,...

如何在小部件树中全局添加 MyListener 作为 MaterialApp 的孙子?

1 个答案:

答案 0 :(得分:1)

Widget 表示绘图布局。您需要的是可在您的应用程序中随处访问的全球服务。将您的 stream 及其侦听器放在不同的 dart 文件|类中,并从您的应用入口点调用它。 StatefulWidget 与此无关