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

问题描述 投票:0回答:2

我正在尝试从 API 获取数据,并且正在使用 Stream 构建器,但无法从 API 获取数据。以下是我的代码:

我初始化流控制器

final StreamController<APIModel> _streamController = StreamController();

从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);
    }
  }

在响应== 200中,我使用流控制器将所有响应数据接收到控制器中。

以下是ui部分显示数据但无法加载此数据。问题是什么??或者使用 Streambuilder 的正确方法是什么??

...
StreamBuilder<APIModel>(
                      stream: _streamController.stream,
                      builder: (context,AsyncSnapshot<MayyatNewsModel> snapshot) {
                        if (snapshot.hasData) {
                          return ListView.builder(
...
flutter
2个回答
0
投票

如果您想在每个特定持续时间调用

getdatafromAPI
,您需要首先定义新的流变量,如下所示:

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

然后像这样使用它:

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

0
投票

除了周期流还有其他方式吗?

© www.soinside.com 2019 - 2024. All rights reserved.