简体   繁体   English

使用 Stream 构建器 flutter 获取 API 数据

[英]Fetch API data using Stream builder flutter

I am trying to fetch data from API and I am using Stream builder but I am unable to fetch data from API. Following are my code:我正在尝试从 API 获取数据,我正在使用 Stream 生成器,但我无法从 API 获取数据。以下是我的代码:

I initalize stream controller我初始化 stream controller

final StreamController<APIModel> _streamController = StreamController();

Method for get data from API API获取数据的方法

Future<APIModel> getdatafromAPI() async {
    var url =
        "myapi";
    var response = await http.get(Uri.parse(url));
    var data = jsonDecode(response.body.toString());

    if (response.statusCode == 200) {
      //sink data for stream builder
      _streamController.sink.add(APIModel.fromJson(data));
      return MayyatNewsModel.fromJson(data);
    } else {
      return MayyatNewsModel.fromJson(data);
    }
  }

in response == 200 i used stream controller to sink all response data into the controller.作为响应 == 200,我使用 stream controller 将所有响应数据汇入 controller。

Following are ui part to show data but unable to load this data.以下是显示数据但无法加载此数据的 ui 部分。 What is the problem??问题是什么?? or what is the right way to use Streambuilder??或者什么是使用 Streambuilder 的正确方法?

...
StreamBuilder<APIModel>(
                      stream: _streamController.stream,
                      builder: (context,AsyncSnapshot<MayyatNewsModel> snapshot) {
                        if (snapshot.hasData) {
                          return ListView.builder(
...

If you want to call your getdatafromAPI for every specific duration you need to first define new stream variable like this:如果你想在每个特定的持续时间内调用你的getdatafromAPI ,你需要首先定义新的 stream 变量,如下所示:

late Stream<APIModel> stream = Stream.periodic(Duration(seconds: 5))
  .asyncMap((event) async => await getdatafromAPI());

then use it like this:然后像这样使用它:

StreamBuilder<APIModel>(
    stream: stream,
    builder: ...
),

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM