Flutter — Класс модели будущего, возвращающий значение null

#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. хорошо сделав это, вы только устраните ошибку.. Значения по-прежнему равны нулю