gpt4 book ai didi

flutter - 抖动-来自REST API的实时流数据

转载 作者:行者123 更新时间:2023-12-03 03:04:25 24 4
gpt4 key购买 nike

我正在使用流从REST API检索数据,但是当数据库中的数据更新时,流不会刷新应用程序中的数据。

StreamController _productsController = new StreamController();
...
//products is a list that contains the data
_productsController.add(products);
...
body: Container(
child: StreamBuilder(
stream: _productsController.stream,
builder: (BuildContext context, AsyncSnapshot snapshot) {...}

我看到了一个解决方案,建议定期(例如,每1秒)从API重新加载数据。
Timer.periodic(Duration(seconds: 1), (_) => loadDetails());

资料来源: Stream for API coming from PHP in Flutter (Not Firebase)

我认为这不是一种有效的方法。例如,在我的应用程序中,我想集成数据更改而不重新加载数据。

有没有一种有效的方法可以使流在不重新加载数据的情况下反射(reflect)应用程序中的数据更改?

最佳答案

您可以使用dart实现自己的流,如docs所示
这样,您也将需要一个延迟,并且您将定期调用该API,但是如果您的API在未先调用它的情况下不发送任何消息,那么我想这就是方法。

Stream<Product> productsStream() async* {
while (true) {
await Future.delayed(Duration(milliseconds: 500));
Product someProduct = getProductFromAPI();
yield someProduct;
}
}
代码的一些解释:
  • 您需要一个循环来定期调用API。不必担心无限循环,因为流只会在构建调用它的StreamBuild时使用。
  • 使用流
  • 时, yield关键字类似于 return

    然后,要使用它,只需实现一个调用刚创建的 StreamBuilderStream:
    StreamBuilder(
    stream: productsStream(),
    builder: (BuildContext context, AsyncSnapshot<Product> snapshot) {...}
    )

    关于flutter - 抖动-来自REST API的实时流数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60775054/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com