Sorting 如何根据函数返回的值对dart中的列表进行排序

Sorting 如何根据函数返回的值对dart中的列表进行排序,sorting,flutter,dart,location,distance,Sorting,Flutter,Dart,Location,Distance,我必须按最近的位置按排序顺序显示商店列表 我有一个未排序的存储列表和一个要计算的函数 每个商店离我当前位置的距离,但我不知道如何 根据函数返回的值对dart中的列表进行排序。 我正在从api获取未排序的存储数据列表。 我需要这个问题的逻辑来排序_kikkleStores列表 class KikkleStoresBloc extends BlocBase { List<KikkleStoreInfo> _kikkleStores = []; //for distance s

我必须按最近的位置按排序顺序显示商店列表 我有一个未排序的存储列表和一个要计算的函数 每个商店离我当前位置的距离,但我不知道如何 根据函数返回的值对dart中的列表进行排序。 我正在从api获取未排序的存储数据列表。 我需要这个问题的逻辑来排序_kikkleStores列表

  class KikkleStoresBloc extends BlocBase {
  List<KikkleStoreInfo> _kikkleStores = [];
  //for distance sorting
  List<KikkleStoreInfo> _kikkleStoresSorted = [];
  List<double> distanceFromCurrentLocation;//already got 
  value in it
  bool hasReachedEndOfList = false;
  Coordinate _currentLocation;

  KikkleStoresBloc();

  final _kikkleStoreSubject = 
  BehaviorSubject<List<KikkleStoreInfo>> 
  ();

  // Getter Stream
  Stream<List<KikkleStoreInfo>> get kikkleStores => 
  _kikkleStoreSubject.stream;`enter code here`

  // Getter Sink
  Function(List<KikkleStoreInfo>) get _fetchedkikkleStores =>
  _kikkleStoreSubject.sink.add;

  getKikkleStores() async {
    try {
      if (_currentPage <= _totalPages) {
        final response = await 
         ApiController.getKikkleStores(_currentPage);
        _kikkleStores.addAll(response.item1);



       //here how to sort _kikkleStores by using 
       getStoreDistance function



        _totalPages = response.item3;
        _fetchedkikkleStores(_kikkleStores);
        if (_currentPage == _totalPages) {
          hasReachedEndOfList = true;
        } else if (_currentPage < _totalPages && 
        _kikkleStores.length 
        < 10) {

              }
            } 
          } 
         }

  // this function returns distance 
  getStoreDistance(Coordinate currentLocation, KikkleStoreInfo 
  store) 
  async {
    if (currentLocation == null) return 0.0;
    try {
      double distanceInMeter = await 
      LocationUtils.getDistanceInMeters(
      currentLocation, Coordinate(store.latitude, 
      store.longitude));
      // final miles = (distanceInMeter / 1609.344).round();
      return distanceInMeter;
    } catch (e) {
      return 0.0;
    }
  }
  void getCurrentLocation() async {
    try {
      final isAllowed = await 
      PermissionsUtils.isLocationAccessAllowed();
      if (isAllowed) {
        final coordinates = await 
        LocationUtils.getCurrentLocation();
        if (coordinates != null) {
          _currentLocation = coordinates;
        }
      }
     } 
     catch (e) {
      print(e);
    }
  }
}

参考下面的代码

void main(){
  List<POJO> pojo = [POJO(5), POJO(3),POJO(7),POJO(1)];
// fill list

pojo..sort((a, b) => a.id.compareTo(b.id));
  for(var i in pojo){
    print(i.id);      // prints list in sorted order i.e 1 3 5 7
  }

}

class POJO {
  int id;

  POJO(this.id);
}


参考下面的代码

void main(){
  List<POJO> pojo = [POJO(5), POJO(3),POJO(7),POJO(1)];
// fill list

pojo..sort((a, b) => a.id.compareTo(b.id));
  for(var i in pojo){
    print(i.id);      // prints list in sorted order i.e 1 3 5 7
  }

}

class POJO {
  int id;

  POJO(this.id);
}


void sortKikkleStores async{//sorting algo wait _kikkleStores.sorta,b=>getStoreDistance_currentLocation,a.compareTo_currentLocation,b;}。当我尝试此功能时,应用程序挂起sorting@waqarsaeed如果KikkleStoreInfo类具有currentLocation属性,那么在将对象添加到列表中之后_kikkleStores执行如下排序_kikkleStores.sorta,b=>a.currentLocation.compareTob.currentLocation;在KikkLeSturs{FraveI中的FavaI;}最终解决了.VITE SoTFLoad异步{{int }=0;C< KikkLoStudisLoad - 1;C++ {int=0;d<KikkLoStuthsLime-C--1;D+++ {如果等待GETStureExistOnCurrestLoad,KikkLoStur[d]>等待getStoreDistance\u currentLocation,\u kikkleStores[d+1]/*按降序使用<*/{swap=\u kikkleStores[d];\u kikkleStores[d]=\u kikkleStores[d+1]=swap;}}}void sortKikkleStores异步{//排序算法等待_kikkleStores.sorta,b=>getStoreDistance_currentLocation,a.compareTo_currentLocation,b;}。当我尝试此功能时,应用程序挂起sorting@waqarsaeed如果KikkleStoreInfo类具有currentLocation属性,那么在将对象添加到列表中之后_kikkleStores执行如下排序_kikkleStores.sorta,b=>a.currentLocation.compareTob.currentLocation;forvar i in _kikkleStores{ Prim.CurrnTrist};}最终解决了.int of Offic C=0;C.KikkLoStudisStime- 1;C++ {int=0;d<KikkLoStudisSale- C-+1;D+++ {等待GotoStureExistOr.CurrestS位置,Y-KikkLoSt[d] >等待GoestStureExisturyCurrestSurvivin,KikkLoStices[d+1]/*按降序使用<*/{swap=\u kikkleStores[d];\u kikkleStores[d]=\u kikkleStores[d+1];\u kikkleStores[d+1]=swap;}}}