如何每隔X秒钟从api获取api中的数据?

时间:2019-06-04 15:15:23

标签: flutter flutter-animation

我想每隔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)
  },
 )

2 个答案:

答案 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

Link directly to the gist