开始着手 Flutter 进行研究项目,我想知道如何对文件列表进行排序。
确实,我的程序有一个包含 4 个文件的列表,如下所示:
List<File> imageFiles = List(4);
这个初始化实际上意味着我的列表是这样的:
[null,null,null,null]
。
当用户执行操作时,此列表可能会填满。然而,用户可以随时删除文件,这会给我们带来以下情况:
[file A, null, null, file d]
.
我的问题是,当删除到达时如何对列表进行排序,以便获得一个空对象始终位于最后的列表(
[file A, file D, null, null]
)。
我已经看过很多主题,但它们从来不涉及 DART。
预先感谢您的帮助。
您可以使用
list.sort((a, b) => a == null ? 1 : 0);
对列表进行排序
这是一个完整的示例,使用
String
而不是 File
,您可以在 DartPad 上运行
void main() {
List<String> list = List(4);
list[0] = "file1";
list[3] = "file4";
print("list before sort: $list");
// list before sort: [file1, null, null, file4]
list.sort((a, b) => a == null ? 1 : 0);
print("list after sort: $list");
// list after sort: [file1, file4, null, null]
}
如果“业务需求”最多有 4 个文件,我建议创建一个可以处理该问题的“值对象”。
例如:
class ImageList {
final _images = List<String>();
void add(String image) {
if(_images.length < 4) {
_images.add(image);
}
}
void removeAt(int index) {
_images.removeAt(index);
}
String get(int index) {
return _images[index];
}
List getAll() {
return _images;
}
}
你可以像这样运行它:
void main() {
ImageList imageList = ImageList();
imageList.add("file1");
imageList.add("file2");
imageList.add("file3");
imageList.add("file4");
imageList.add("file5"); // won't be add
print("imagelist: ${imageList.getAll()}");
// imagelist: [file1, file2, file3, file4]
imageList.removeAt(2); // remove file3
print("imagelist: ${imageList.getAll()}");
// imagelist: [file1, file2, file4]
}
这将使控制变得更容易。 (此示例再次使用
String
而不是
File
)
您可以尝试这个:Dartpad