NoSuchMethodError在Null上调用方法

时间:2019-08-21 11:01:15

标签: flutter dart

在WeatherModel下面的这段代码中,尝试获取Android手机的当前位置, 我的问题是,一旦我开始运行它,显示NoSuchMethod Found,它说接收者为空, 因为我尝试了很多调试只是为了了解问题所在。 我现在知道我的问题是当我在WeatherModel中创建Location()实例时,经度和纬度为null,它永远都不会获得价值,而且我也不知道为什么...

对不起,我的英语不好:(

const apiKey = 'e3653190f2b1d4803287b3074ecfe618';
const apiWeatherURL = 'https://api.openweathermap.org/data/2.5/weather';

class WeatherModel {

  Future<dynamic> getLocationWeather() async {

    Location location = Location();

    NetworkHelper networkHelper = NetworkHelper(
        'https://api.openweathermap.org/data/2.5/weather?lat=${location.latitude}&lon=${location.longitude}&appid=$apiKey');
    var weatherData = networkHelper.getData();
    return weatherData;
  }

  }
.....

class Location {
  double latitude;
  double longitude;

  Future<void> getCurrentLocation() async {
    try {
      Position _position = await Geolocator()
          .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
      longitude = _position.longitude;
      print(longitude);
      latitude = _position.latitude;
      print(latitude);
    } catch (e) {
      print(e);
    }
  }
}
.........

class NetworkHelper {
  NetworkHelper(this.url);
  final url;

  Future getData() async {
    http.Response response = await http.get(url);
    if (response.statusCode == 200) {
      var data = jsonDecode(response.body);
      print(" Sarkawtua $data");
      return data;
    } else
      print("Error ${response.statusCode} keshay Internet");
  }
}

1 个答案:

答案 0 :(得分:0)

因为实例字段未更新,所以它们为空。您有获取当前位置的方法,但没有在getLocationWeather方法中触发。

Future<dynamic> getLocationWeather() async {

    Location location = Location();
    await location.getCurrentLocation();

    NetworkHelper networkHelper = NetworkHelper(
        'https://api.openweathermap.org/data/2.5/weather?lat=${location.latitude}&lon=${location.longitude}&appid=$apiKey');
    var weatherData = await networkHelper.getData();
    return weatherData;
  }

编辑:您还必须等待networkHelper.getData()方法以获取未来数据。