如何在Flutter中添加事件侦听器?

时间:2018-11-07 21:01:09

标签: dart flutter

我对Flutter并不陌生,正在尝试使用SDK。我正在开发一个简单的应用程序,该应用程序在后台具有倒数计时功能,并且希望每隔一定时间触发一次事件。例如,当时钟剩余一分钟时,发送推送通知。总的来说,我试图了解如何监视某些活动,例如应用程序的时间和使用情况,并在满足某些条件后触发其他事件。它像放在正确位置的if-else语句一样简单吗?

我正在寻找什么样的东西来实现这一目标?

谢谢。

3 个答案:

答案 0 :(得分:0)

您可以为此使用ValueNotifier

答案 1 :(得分:0)

我更喜欢将流用于此类任务

Stream<int> timer = Stream.periodic(Duration(seconds: 1), (int count) => count);
...
_MyTextWidget(timer)

和我的小部件

class _MyTextWidget extends StatefulWidget {
  _MyTextWidget(this.stream);

  final Stream<int> stream;

  @override
  State<StatefulWidget> createState() => _MyTextWidgetState();
}

class _MyTextWidgetState extends State<_MyTextWidget> {
  int secondsToDisplay = 0;

  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
        stream: widget.stream,
        builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
          return snapshot.hasData ? Text(snapshot.data.toString()) : Text('nodata');
        });
  }
}

答案 2 :(得分:0)

以下是基于我发现有效的Streams的事件侦听器的更好示例。

在您要收听的小部件中。

class CmVideoPlayer extends StatefulWidget {
  String titlePlaying;

  StreamController changeController = StreamController<VideoPlayerEvent>();

  CmVideoPlayer({Key key, @required this.titlePlaying})
      : assert(titlePlaying != null), super(key: key);

    @override
    _CmVideoPlayerState createState() => _CmVideoPlayerState();

}

参见“ StreamController changeController = StreamController();”行使用小型VideoPlayerEvent类来传递消息。

class VideoPlayerEvent {
  var eventType;
  var eventMessage;

  VideoPlayerEvent(this.eventType, this.eventMessage);
}

然后进入STATEFULLWIDGET ...

将流引用为

class _CmVideoPlayerState extends State<CmVideoPlayer> {
    void Member() {
        widget.changeController.add(new VideoPlayerEvent('state', 'finished'));
    }
}

它位于_CmVideoPlayerState类内部,并且使用通过小部件变量进入父类的功能。

然后使用小部件在代码区域中,并侦听消息。 收听消息

CmVideoPlayer myPlayer = CmVideoPlayer();
myPlayer.changeController.stream.listen((e) {
     print('Reciever event from CmVideoPlayer: ' + e.eventMessage.toString());
}

应该这样做。 但是,这一次仅允许一个侦听器。完成后,我继续前进。但是计划在轨道上实现一个多侦听器。

也许有人可以对此进行扩展。我将其保持尽可能简单。如果某人有一个多侦听器示例。请在这里发布。