flutter - Flutter-如何不一遍又一遍地调用同一个服务?
问题描述
假设我的目标是向用户显示推荐项目的“无尽”列表。
为此,我实现了一些非常昂贵的异步方法 getItemsFromServer(...)(在服务器使用、时间、电池等方面),并从服务器获取 100 个新项目(及其图像),并更新通过添加从服务器获取的项目来显示推荐项目屏幕的状态。
我的目标是仅当用户拥有少于 20 个他尚未查看的项目时才调用此函数。问题是,如果我天真地编程,例如
if(itemsNotViewed<20){
getItemsFromServer(...)
}
在用户点击或查看了一些新项目后,这个异步方法将被调用大约 20 次...... 最原则的方法是只调用一次方法并等待它完成,同时不干扰用户体验?
解决方案
未来对象本身对于记住某事是否正在发生非常有用。像这样的东西应该工作。理想情况下,您会将其放入从多个位置调用的函数中。
class MyState ... {
Future itemsBeingGotten;
build() {
...
onPress: () async {
if (itemsBeingGotten == null && itemsNotViewed < 20) {
try {
itemsBeingGotten = getItemsFromServer()
await itemsBeingGotten;
} finally {
itemsBeingGotten = null;
}
}
}
}
推荐阅读
- sql - GETDATE() 插入空格 SQL Server
- django - Django REST Framework 验证功能与 Django 模型具有不同的签名?
- laravel - 使用路由名时路径不对 Laravel
- visual-studio-code - 在 VSCode 中,如何通过 API 向文档添加新的选择?
- javascript - Mongoose如何在数组中填充模式
- python - 需要检查条件并打印 -python
- java - 无法对集合列表进行排序
- r - 使用混淆矩阵`data`和`reference`的错误应该是具有相同水平的因素
- c# - 如何将 ViewBag 中的详细信息转换为用于 FileStreamResult 的字符串?
- c++ - 将用户输入验证为坐标 (A1...)