我对 Flutter 还很陌生,正在尝试使用 SDK。我正在开发一个简单的应用程序,它在后台有一个倒计时,并希望以特定的时间间隔触发一个事件。例如,当时钟剩余一分钟时,发送推送通知。一般来说,我试图了解如何监控某些活动,例如应用程序的时间和使用情况,一旦满足某些条件,就会触发其他事情。它是否像放置在正确位置的 if-else 语句一样简单?
我在寻找什么样的东西来实现这个?
提前致谢。
我更喜欢使用流来完成此类任务
Stream<int> timer = Stream.periodic(Duration(seconds: 1), (int count) => count);
...
_MyTextWidget(timer)
Run Code Online (Sandbox Code Playgroud)
和我的小部件
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');
});
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我发现有效的基于 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();
}
Run Code Online (Sandbox Code Playgroud)
请参阅“StreamController changeController = StreamController();”行 它使用一个小类 VideoPlayerEvent 来携带消息。
class VideoPlayerEvent {
var eventType;
var eventMessage;
VideoPlayerEvent(this.eventType, this.eventMessage);
}
Run Code Online (Sandbox Code Playgroud)
然后在 STATEFULLWIDGET 中...
将流称为
class _CmVideoPlayerState extends State<CmVideoPlayer> {
void Member() {
widget.changeController.add(new VideoPlayerEvent('state', 'finished'));
}
}
Run Code Online (Sandbox Code Playgroud)
因为它位于 _CmVideoPlayerState 类内部,并且能够通过 widget 变量访问父类。
然后在代码区域中使用小部件,并监听消息。. 监听消息
CmVideoPlayer myPlayer = CmVideoPlayer();
myPlayer.changeController.stream.listen((e) {
print('Reciever event from CmVideoPlayer: ' + e.eventMessage.toString());
}
Run Code Online (Sandbox Code Playgroud)
应该可以做到这一点。然而,这一次只允许一名听众。完成这件事后,我继续前进。但计划在后续实施多侦听器。
也许有人可以对此进行扩展。我尽可能保持简单。如果有人有一个多听众的例子。请在这里发帖。
归档时间: |
|
查看次数: |
28383 次 |
最近记录: |