gpt4 book ai didi

datetime - 如何在 Flutter 中使用 Streams 更新时间?

转载 作者:行者123 更新时间:2023-12-03 03:24:52 27 4
gpt4 key购买 nike

我一直在研究流的使用,因为我认为这将是我的应用程序的最佳解决方案。我希望能够以特定的时间间隔检查时间,然后根据太阳升起或落下自动更改 map 的主题。我有主题和太阳代码,但我需要将它们连接在一起。

到目前为止,这是我的代码。如果我对 Controller 和订阅使用 double 并简单地生成一个随机数,那么一切都很好。我每秒得到一个不同的随机生成的数字。

但是,使用下面的代码只是再次显示相同的时间。

有人能指出我正确的方向吗?

import 'dart:async';
import 'dart:core';

import 'package:flutter/material.dart';

void main() => runApp(StreamTest());

class StreamTest extends StatefulWidget {
@override
_StreamTestState createState() => _StreamTestState();
}

class _StreamTestState extends State<StreamTest> {
StreamController<DateTime> controller =
StreamController<DateTime>.broadcast();
StreamSubscription<DateTime> streamSubscription;
DateTime currentTime = DateTime.now();

@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Stream Demo",
home: Scaffold(
body: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
MaterialButton(
color: Colors.yellow,
child: Text("Subscribe"),
onPressed: () async {
getTime().listen((value) {
print('CURRENT TIME $currentTime');
});
},
),
MaterialButton(
child: Text('Unsubscribe'),
color: Colors.red[200],
onPressed: () {
streamSubscription.cancel();
},
),
],
),
),
),
);
}
}

Stream<DateTime> getTime() async* {
DateTime currentTime = DateTime.now();
while (true) {
await Future.delayed(Duration(seconds: 1));
yield currentTime;
}
}

谢谢

最佳答案

如@pskink 所述,您可以使用 Stream.periodic。

DateTime current = DateTime.now();
Stream timer = Stream.periodic( Duration(seconds: 1), (i){
current = current.add(Duration(seconds: 1));
return current;
});

timer.listen((data)=> print(data));

关于datetime - 如何在 Flutter 中使用 Streams 更新时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58858044/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com