我可以使用StreamBuilder从Api获取实时数据吗

人气:960 发布:2022-10-16 标签: api flutter flutter-web flutter-dependencies

问题描述

大家好。我正在做一个足球比分的实时数据应用程序。我不知道如何解决这个问题,如果我使用HTTP.GET,我将不得不每次刷新才能获得最新数据。我不知道StreamBuilder是否可以工作,也不知道该怎么做。提前感谢您的帮助。

推荐答案

如docs所述,StreamBuilder是:

基于与流交互的最新快照构建自身的小部件。

因此,要使用它,首先需要创建一个提供数据的Stream,将其传递给StreamBuilder的流道具,然后在构建器道具中基于快照数据构建您的小部件。

这里有一个简短的示例,它使用Stream.periodic每隔5秒返回一次未来,并生成将来的调用:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class PeriodicRequester extends StatelessWidget {
  Stream<http.Response> getRandomNumberFact() async* {
    yield* Stream.periodic(Duration(seconds: 5), (_) {
      return http.get("http://numbersapi.com/random/");
    }).asyncMap((event) async => await event);
  }

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<http.Response>(
      stream: getRandomNumberFact(),
      builder: (context, snapshot) => snapshot.hasData
          ? Center(child: Text(snapshot.data.body))
          : CircularProgressIndicator(),
    );
  }
}

1,003