sample_weather.dart
import 'package:flutter/material.dart';
import 'package:flutter_http/model/sample_weather_model.dart';
import 'package:http/http.dart' as http;
class ExSampleWeather extends StatelessWidget {
const ExSampleWeather({super.key});
void getWeather() async {
// 1. 통신할 url 주소
String url = "https://samples.openweathermap.org/data/2.5/weather?q=London&appid=b1b15e88fa797225412429c1c50c122a1";
// 2. http 통신 get/ post
http.Response res = await http.get(Uri.parse(url));
print(res.statusCode);
print(res.body);
SampleWeather sw = sampleWeatherFromJson(res.body);
print(sw.name);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(child:
ElevatedButton(onPressed: (){
getWeather();
}, child: Text("확인"),)),
);
}
}
sample_weather_model.dart
// To parse this JSON data, do
//
// final sampleWeather = sampleWeatherFromJson(jsonString);
import 'dart:convert';
SampleWeather sampleWeatherFromJson(String str) => SampleWeather.fromJson(json.decode(str));
String sampleWeatherToJson(SampleWeather data) => json.encode(data.toJson());
class SampleWeather {
Coord coord;
List<Weather> weather;
String base;
Main main;
int visibility;
Wind wind;
Clouds clouds;
int dt;
Sys sys;
int id;
String name;
int cod;
SampleWeather({
required this.coord,
required this.weather,
required this.base,
required this.main,
required this.visibility,
required this.wind,
required this.clouds,
required this.dt,
required this.sys,
required this.id,
required this.name,
required this.cod,
});
factory SampleWeather.fromJson(Map<String, dynamic> json) => SampleWeather(
coord: Coord.fromJson(json["coord"]),
weather: List<Weather>.from(json["weather"].map((x) => Weather.fromJson(x))),
base: json["base"],
main: Main.fromJson(json["main"]),
visibility: json["visibility"],
wind: Wind.fromJson(json["wind"]),
clouds: Clouds.fromJson(json["clouds"]),
dt: json["dt"],
sys: Sys.fromJson(json["sys"]),
id: json["id"],
name: json["name"],
cod: json["cod"],
);
Map<String, dynamic> toJson() => {
"coord": coord.toJson(),
"weather": List<dynamic>.from(weather.map((x) => x.toJson())),
"base": base,
"main": main.toJson(),
"visibility": visibility,
"wind": wind.toJson(),
"clouds": clouds.toJson(),
"dt": dt,
"sys": sys.toJson(),
"id": id,
"name": name,
"cod": cod,
};
}
class Clouds {
int all;
Clouds({
required this.all,
});
factory Clouds.fromJson(Map<String, dynamic> json) => Clouds(
all: json["all"],
);
Map<String, dynamic> toJson() => {
"all": all,
};
}
class Coord {
double lon;
double lat;
Coord({
required this.lon,
required this.lat,
});
factory Coord.fromJson(Map<String, dynamic> json) => Coord(
lon: json["lon"]?.toDouble(),
lat: json["lat"]?.toDouble(),
);
Map<String, dynamic> toJson() => {
"lon": lon,
"lat": lat,
};
}
class Main {
double temp;
int pressure;
int humidity;
double tempMin;
double tempMax;
Main({
required this.temp,
required this.pressure,
required this.humidity,
required this.tempMin,
required this.tempMax,
});
factory Main.fromJson(Map<String, dynamic> json) => Main(
temp: json["temp"]?.toDouble(),
pressure: json["pressure"],
humidity: json["humidity"],
tempMin: json["temp_min"]?.toDouble(),
tempMax: json["temp_max"]?.toDouble(),
);
Map<String, dynamic> toJson() => {
"temp": temp,
"pressure": pressure,
"humidity": humidity,
"temp_min": tempMin,
"temp_max": tempMax,
};
}
class Sys {
int type;
int id;
double message;
String country;
int sunrise;
int sunset;
Sys({
required this.type,
required this.id,
required this.message,
required this.country,
required this.sunrise,
required this.sunset,
});
factory Sys.fromJson(Map<String, dynamic> json) => Sys(
type: json["type"],
id: json["id"],
message: json["message"]?.toDouble(),
country: json["country"],
sunrise: json["sunrise"],
sunset: json["sunset"],
);
Map<String, dynamic> toJson() => {
"type": type,
"id": id,
"message": message,
"country": country,
"sunrise": sunrise,
"sunset": sunset,
};
}
class Weather {
int id;
String main;
String description;
String icon;
Weather({
required this.id,
required this.main,
required this.description,
required this.icon,
});
factory Weather.fromJson(Map<String, dynamic> json) => Weather(
id: json["id"],
main: json["main"],
description: json["description"],
icon: json["icon"],
);
Map<String, dynamic> toJson() => {
"id": id,
"main": main,
"description": description,
"icon": icon,
};
}
class Wind {
double speed;
int deg;
Wind({
required this.speed,
required this.deg,
});
factory Wind.fromJson(Map<String, dynamic> json) => Wind(
speed: json["speed"]?.toDouble(),
deg: json["deg"],
);
Map<String, dynamic> toJson() => {
"speed": speed,
"deg": deg,
};
}