#flutter #dart
Вопрос:
Я создаю приложение погоды с помощью api openweather. Я создал файл ‘api_manager.dart’ для извлечения json из api.
import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:weather_app2/Components/constants.dart'; import 'package:weather_app2/Models/weather_model.dart'; class API_MANAGER { Futurelt;WeatherModelgt; getWeather( String lats, String longs, String address) async { var client = http.Client(); var weatherModel = null; try { var url = Uri.parse( 'https://api.openweathermap.org/data/2.5/onecall?lat=$latsamp;lon=$longsamp;appid=$API_WEATHER'); var response = await client.get(url); if (response.statusCode == 200) { var jsonStream = response.body; var jsonMap = json.decode(jsonStream); weatherModel = WeatherModel.fromJson(jsonMap, address); } } catch (e) { return weatherModel; } return weatherModel; } }
Json извлекается правильно, при печати ответа он печатает json. Но проблема в том, что я создал класс модели для извлеченного файла json. Но когда он вызывается в файле api_manager, он возвращает нулевую ошибку. _TypeError (тип «Null» не является подтипом типа «FutureOr»)
import 'package:weather_app2/Components/dayConvert.dart'; class WeatherModel { WeatherModel( {this.currently, this.date, this.description, this.feels_like, this.hourly, this.humidity, this.latitude, this.longitude, this.month, this.sunset, this.temp, this.week, this.address, this.windspeed, this.data}); dynamic? latitude; dynamic? longitude; dynamic? temp; dynamic? week; dynamic? month; dynamic? date; dynamic? description; dynamic? currently; dynamic? windspeed; dynamic? humidity; dynamic? feels_like; dynamic? sunset; dynamic? hourly; dynamic? address; Maplt;String, dynamicgt;? data; factory WeatherModel.fromJson(Maplt;String, dynamicgt; json, String address) =gt; WeatherModel( latitude: json['lat'], longitude: json['lon'], temp: json['current']['temp'], week: DayConvert().weekconvert(DateTime.now().weekday), month: DayConvert().monthconvert(DateTime.now().month), date: DateTime.now().day, description: json['current']['weather']['description'], windspeed: json['current']['wind_speed'], humidity: json['current']['humidity'], feels_like: json['current']['feels_like'], sunset: json['current']['sunset'], address: address, hourly: json['hourly']); Maplt;String, dynamicgt;? toJson() { print('ss'); data = new Maplt;String, dynamicgt;(); data!['lat'] = latitude; data!['long'] = longitude; data!['temp'] = temp; data!['week'] = week; data!['month'] = month; data!['date'] = date; data!['description'] = description; data!['windspeed'] = windspeed; data!['humidity'] = humidity; data!['feels_like'] = feels_like; data!['sunset'] = sunset; data!['address'] = address; data!['hourly'] = hourly; return data; } }
Пожалуйста, помогите мне. Дайте мне знать, где я ошибся.
Комментарии:
1. означает ли ваше будущее возвращение модели погоды с нулевыми значениями?
2.
} catch (e) { return weatherModel; }
поставьте точку останова на возврате туда и проверьтеe
, в чем проблема. Мы не знаем, ваша программа уже знает.3. ничего не происходит..точная ошибка.._TypeError (тип ‘Null’ не является подтипом типа ‘FutureOrlt;Модель погодыgt;’)
4. ты возвращаешься
var weatherModel = null;
. Измените его, чтобыWeatherModel weatherModel = null
затем вернутьFuturelt;WeatherModel?gt;
5. хорошо сделав это, вы только устраните ошибку.. Значения по-прежнему равны нулю