В Flutter, как я могу вернуть объект после завершения Future во вложенных асинхронных функциях? - PullRequest
0 голосов
/ 10 марта 2019

У меня есть функция, которая вызывает различные другие функции, которые возвращают Future, и после завершения одного Future вызывается другой метод, который возвращает будущее, и в конце мне нужно вернуть значение как переменную, но проблема в том, что функциявозвращает значение NULL вместо значения.

_getLocationPermission () ждет и получает требуемое разрешение, мне нужно подождать, пока я не получу разрешение после получения разрешения, мне нужно вызвать _getCurrentLocation () , который вернет Future , и я должен передать данные этого объекта в getWeatherDetails () , и он в конечном итоге вернет Future , и я не знаю, как я могу вернутьэта строка в операторе возврата.

Future<String> getData() async {
String longitude, latitude, weatherDetails;
_getLocationPermission().then((permissionStatus) {
  _getCurrentLocation().then((location) async {
    longitude = location.longitude.toString();
    latitude = location.latitude.toString();
    weatherDetails = await getWeatherDetails(longitude, latitude);
    print(longitude);
  });
});

return weatherDetails;

}

Спасибо!

1 Ответ

0 голосов
/ 10 марта 2019

Похоже, вы возвращаете aync-ответ разрешения функции getWeatherDetails, а не Future, как показывает тип возвращаемого значения вашей функции.

Future<String> getData() async { 
    var weather;
     _getLocationPermission().then((_){
    var location  = await _getCurrentLocation();

    weather = getWeatherDetails(location.longitude.toString(), location.latitude.toString());
    })
.catchError((error){
// Handle if location permission fails
});

   return weather;
}
...