【发布时间】:2022-01-09 17:37:57
【问题描述】:
我正在尝试从我在 Flutter 中内置的快速 API 获取消息。
问题是,为了获取我的消息,我构建了一个流构建器,因为我希望消息列表能够根据新消息进行更新。为此,创建一个 Steam 方法,每 x 秒检查一次 API。
Stream<List<Message>> streamMessage() async* {
final storage = FlutterSecureStorage();
var json = (await storage.read(key: 'user'))!;
User user = User.fromJson(jsonDecode(json));
jwt = user.jwt;
yield* Stream.periodic(const Duration(seconds: 3), (_) async {
http.Response response = await http.get(
Uri.parse("https://myapi.com/messages"),
headers: {
'Authorization': 'Bearer $jwt',
});
List<Message> messages = [];
if (response.statusCode == 200) {
var list = List.from(jsonDecode(response.body)).reversed;
messages = list.map((e) => Message.fromJson(e)).toList();
} else {
log("Error : ${response.statusCode} -- ${response.reasonPhrase}");
}
return messages;
}).asyncMap(
(value) async => await value,
);
}
它有效,但它有很多问题。
- 更新没有我想要的那么快
- 很多要求都无济于事
- API 很容易过载
- 这种方式看起来更像是一种解决方法,而不是真正的功能
我想在我的后端创建一个机制来更像一个真正的流订阅。因为它与 Firebase 一起使用。但我不知道它是如何工作的,甚至不知道要搜索什么。
如果您有任何提示,我该如何实现?
【问题讨论】:
标签: flutter api express stream