我想每隔x秒钟从api提取数据以将数据实时显示在小部件中,并且我还想在数据更改时为小部件制作动画。我尝试使用Stream和Stream Builder,这是实时获取数据的最佳方法请帮助我。
这是我的代码。
class Post{
final String title;
Post({this.title});
factory Post.fromJson(Map<String, dynamic> json) {
return Post(
no: json['title']
);
}
}
class PostData {
static String _url="https://jsonplaceholder.typicode.com/posts/1";
static Future browse () async {
http.Response response = await http.get(_url);
Post post= Post.fromJson(json.decode(response.body));
return post;
}
Stream<int> get getLiveData async* {
yield await PostData.browse();
}
StreamBuilder<Post>(
stream: getLiveData,
builder: (context, snapshot) {
return Text(snapshot.data.title)
},
)
答案 0 :(得分:1)
您应该看一下Timer.Periodic https://api.flutter.dev/flutter/dart-async/Timer/Timer.periodic.html,我将它与setState一起使用,但是我敢肯定,使用Stream也是可以的。
编辑: 我还没有使用Stream.periodic进行过测试,但也许是这样的:
Stream <int> getPeriodicStream() async* {
yield* Stream.periodic(Duration(seconds: 30), (_) {
return await PostData.browse();
});
}
答案 1 :(得分:0)
您可能还需要仅在应用程序处于前台状态时执行此操作(以防止不必要的电池消耗)。您可以使用我的LifecycleAwareStreamBuilder,其中有一个有关如何使用它的示例here