flutter 从流中一次请求一个项目的数据?

dy1byipe  于 2022-12-24  发布在  Flutter
关注(0)|答案(1)|浏览(172)

我正在尝试从一个提供分页响应的REST端点获取数据。在flutter中单击一个按钮时,我希望获得响应中的下一个项目。我 * 认为 * 我希望使用一个流来抽象掉请求的分页特性,并自动轮询下一个结果。
就像这个伪代码:

Stream<String> nextUrl(int lastPage=0)
{
  // Get paginated response
  batch = server.getResponse(lastPage)
  for (item in batch)
  {
      yield item;
  }
  // Recurse automatically
  // Not a problem if the stream is suspended
  // after every item request.  A big problem
  // if the stream never pauses.
  await for (String item in nextUrl(lastPage++)
  {
      yield item;
  }
}

// In flutter
class WidgetState extends state<MyPage> {
  Stream<String> urlStream = new nextUrl(0);
  String currentItem;
...
  @override
  Widget build(BuildContext context) {
      return new InkWell(
        onTap: () {
          (() async {
              // This is the call I haven't figured out.
              await item = urlStream().getNext();
              setState(() { currentItem = item; });
          })();
        }
      );
  }
}

我有一种感觉,也许像Stream.getNext()这样的东西并不存在?我应该暂停/取消暂停这个流?但是我不确定为什么一次只返回一个项目。

cetgtptt

cetgtptt1#

async包提供了StreamQueue,允许执行此操作

var events = new StreamQueue<String>(yourStream);
var first = await events.next;
while (...) {
  ...
  first = await events.next;
}

相关问题