【问题标题】:How to add new data into Future<dynamic> in dart / flutter?如何在 dart/flutter 中将新数据添加到 Future<dynamic> 中?
【发布时间】:2021-06-13 14:44:41
【问题描述】:

我正在使用Flutter / Dart 在移动应用程序中开发一个聊天系统。

我已通过 API 从服务器获取用户的消息记录,并收到Future&lt;dynamic&gt; 的结果。此结果包含聊天数据列表。如果我将它传递给FutureBuilder 小部件。它可以工作并在listTile 中列出聊天记录。一切正常。

当用户添加新的聊天消息时,我通过 API 将该文本消息发布到服务器以存储到数据库中。它可以工作,响应状态为 200,这意味着消息已添加到服务器的数据库中。

我有一个新添加的聊天消息实例,我想将它附加/添加到之前获取的Future&lt;dynamic&gt; 结果中。

请建议我如何做到这一点?我们可以更新Future&lt;dynamic&gt; 输入的数据吗?谢谢。

【问题讨论】:

  • 你的数据库或后端是什么。 (例如火力基地)
  • 我将 Lumen 8 用于后端服务,将 Flutter/dart 用于移动应用程序。

标签: flutter dart


【解决方案1】:

Future 在设计上只能发射一项。如果要发出多个项目,请使用Streamhttps://api.flutter.dev/flutter/dart-async/Stream-class.html

要了解如何生成流,请查看以下内容:https://dart.dev/articles/libraries/creating-streams

最有可能你想做的是使用rxdartBehaviorSubject或dart的StreamController(他们共享api,所以只需替换名称,除了ValueStream,这是特定于rxdart的,这个将不得不替换为 Stream):

class Api {
  final _subject = BehaviorSubject<DataToDisplay>();
  ValueStream<DataToDisplay> get data => _subject.stream;


  void fetchData() {
    final data = downloadDataFromSomewhere();
    _subject.add(data);
  }
}

然后只需创建一个类似于FutureBuilderStreamBuilder

【讨论】:

  • 感谢您的详细解释。这意味着 A Future 无法听到变量的变化。这是一次性响应。相反,我们需要使用 Stream。好的,我将使用 Streambuilder 而不是 Futurebuilder。谢谢mightybruno。
  • FutureBuilder 用于一次性响应,例如从相机获取图像,从原生平台获取一次数据(例如获取设备电池),获取文件引用,发出 http 请求等。另一方面, StreamBuilder 用于多次获取某些数据,例如监听位置更新、播放音乐、秒表等。
猜你喜欢
  • 2020-05-02
  • 2020-07-09
  • 2021-08-17
  • 1970-01-01
  • 2019-09-08
  • 2020-11-05
  • 1970-01-01
  • 2018-05-26
  • 2020-09-03
相关资源
最近更新 更多