这似乎是一个微不足道的问题 - 但我悲惨地未能找到一种简单的方法来使用 Flutter/Dart 计算我的服务器上特定同类文件的数量。请不要建议 Backendless,因为这看起来好像它可以通过仍在开发中的东西来以巨大的成本实现这一目的。
我尝试返回一个 future 并稍后查看它,并尝试修改全局并稍后在屏幕中查看 - 但失败了。据我现在所知,我会包含一个主文件的 json 项目,其中包含文件数量(之前读入为 jsonMap)。
这是我尝试查看 10 个 json 文件中有多少个的悲惨尝试。 这包括两次尝试 - 一次返回未来索引,另一次增加全局索引。
正如我的标题所示 - 是否有一种简单的方法可以查看服务器上存在多少某种特定类型的文件?我知道我可以使用 FutureBuilder 来等待未来,但这似乎需要付出很大的努力。
Future _checkUrl(String url) async {
http.Response urlResponse = await http.get(Uri.parse(url));
if (urlResponse.statusCode == 200) {
return true;
} else {
return false;
}
}
Future<int> getMaxEngagementIndex(int currentSermonIndex) async {
// maxEngagementTextIndex is range -1 to 9 (-1 should never happen - no engagement files)
String? engagementFileName;
maxEngagementIndexShadow = 0;
int index = 0;
for (int i = 0; i < 10; i++) {
engagementFileName =
pick(jsonMap, currentSermonIndex, 'engagements', i, 'text_a')
.asStringOrNull();
if (engagementFileName == null || engagementFileName == '') {
engagementFileName = '2024-03-170Ia.json';
}
_checkUrl(
'MY_SERVER')
.then((filePresent) {
if (filePresent) {
index++;
maxEngagementIndexShadow++;
}
});
}
return index;
}
一般建议:
如果您控制服务器,您绝对应该将此信息添加到元数据文件中,而不是测试以查看哪些文件存在。 “暴力”测试将消耗更多的流量,并导致您需要忽略的虚假 HTTP 404 错误;如果您决定将来添加缓存,这也会对缓存产生负面影响。另外,如果连接较差,您可能会得到错误的结果。
如果要测试文件是否存在,请使用 HEAD 请求,而不是 GET 请求。后者涉及发送整个文件;前者仅发送标头,因此使用的带宽要少得多。
如果你能保证文件是按ID顺序存储的(即所有ID小于某个值的文件都存在,而所有ID更大的文件不存在),那么你可以使用二分查找的方法,对于更大数量的文件进行测试会更快。