List.sort
- синхронная функция, которая ожидает синхронный обратный вызов;нет способа использовать его с асинхронным обратным вызовом. Я бы порекомендовал преобразовать вашу List
и выполнить любую необходимую асинхронную работу сначала и , а затем , синхронно сортируя результаты. При этом также следует избегать вызова getItemDistance
(который из-за асинхронности может быть дорогостоящим) для одного и того же элемента несколько раз. Например, что-то вроде:
final computedDistances = <Item, double>{};
for (final item in widget.items) {
final distance = await getItemDistance(item, ...);
computedDistances[item] = distance;
}
widget.items.sort((a, b) =>
computedDistances[a].compareTo(computedDistances[b])
);
(я не знаю, что представляет собой второй аргумент getItemDistance
; если вы не можете обойти это, вам нужно построить один Map
сgetItemDistance(..., true)
результатов и один с getItemDistance(..., false)
результатами.)
В качестве последнего средства вы можете написать свою собственную функцию асинхронной сортировки.