Как отсортировать List <File>в Dart с нулевыми объектами в конце - PullRequest
0 голосов
/ 07 февраля 2020

Начиная работать над Flutter для учебного проекта, я задаюсь вопросом о сортировке списка файлов.

Действительно, моя программа имеет список из 4 файлов, инициализированных так:

List<File> imageFiles = List(4);

Эта инициализация фактически подразумевает, что мой список выглядит следующим образом: [null,null,null,null].

Когда пользователь выполняет действия, этот список может заполняться. Тем не менее, пользователь может удалить файл в любое время, что может привести к следующей ситуации: [file A, null, null, file d].

Мой вопрос заключается в том, как отсортировать список при получении удаления, чтобы получить список, в котором нулевые объекты всегда являются последними ([file A, file D, null, null]).

Я уже рассмотрел много тем, но они никогда не касаются DART.

Заранее благодарю за помощь.

1 Ответ

2 голосов
/ 07 февраля 2020

Вы можете отсортировать список с помощью 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...