Flutter天气查询插件open_weather_client的使用
Flutter天气查询插件open_weather_client的使用
open_weather_client
是一个非官方的Dart包,用于轻松使用 OpenWeatherMap API。该插件目前支持通过城市名称、地理坐标(纬度、经度)和邮政编码(邮政编码和国家代码)获取天气数据。此外,插件还支持5天天气预报。
特性
单位类型
WeatherUnits.STANDARD
:华氏温度WeatherUnits.METRIC
:摄氏温度WeatherUnits.IMPERIAL
:开尔文温度
语言支持
Languages.GERMAN
:德语- 默认语言为
Languages.ENGLISH
:英语
安装
要安装依赖项,请在 pubspec.yaml
文件中添加 open_weather_client
:
dependencies:
open_weather_client: ^latest_version
使用
预构建函数获取当前天气
在使用插件之前,你需要从 OpenWeatherMap 获取API密钥。插件仅使用免费的端点。
初始化
import 'package:open_weather_client/open_weather.dart';
...
OpenWeather openWeather = OpenWeather(apiKey: 'YOUR_API_KEY');
通过城市名称获取天气
final String _key = 'YOUR_API_KEY';
final String _cityName = 'Florida';
final Languages _language = Languages.ENGLISH;
WeatherData weatherData = await openWeather
.currentWeatherByCityName(
cityName: _cityName,
weatherUnits: WeatherUnits.METRIC,
language: _language)
.catchError((err) => print(err));
通过地理坐标获取天气
final double _latitude = 52.3545828;
final double _longitude = 4.7638781;
WeatherData weatherData = await openWeather
.currentWeatherByLocation(
latitude: _latitude,
longitude: _longitude,
weatherUnits: WeatherUnits.METRIC,
language: _language)
.catchError((err) => print(err));
通过邮政编码获取天气
final int _zipCode = 3512;
final String _countryCode = 'NL';
WeatherData weatherData = await openWeather
.currentWeatherByZipCode(
zipCode: _zipCode,
countryCode: _countryCode,
weatherUnits: WeatherUnits.METRIC,
language: _language)
.catchError((err) => print(err));
访问值
获取到的天气数据可以通过以下类访问:
-
Coordinates
类包含:lat
:城市地理位置的纬度lon
:城市地理位置的经度
-
Details
类包含:id
:天气状况IDweatherShortDescription
:天气参数组(如雨、雪、极端等)weatherLongDescription
:天气状况描述icon
:图标ID
-
Temperature
类包含:currentTemperature
:当前温度feelsLike
:体感温度tempMin
:最低温度tempMax
:最高温度pressure
:大气压humidity
:湿度
-
Wind
类包含:speed
:风速deg
:风向gust
:阵风
示例代码:
WeatherData weatherData = await openWeather
.currentWeatherByCityName(
cityName: _cityName,
weatherUnits: WeatherUnits.METRIC,
language: _language)
.catchError((err) => print(err))
.then((data) {
print(data.details.first.weatherShortDescription);
print(data.name.toString());
print(data.temperature.currentTemperature);
print(data.wind.speed);
});
预构建小部件获取当前天气
你也可以使用内置的小部件来显示天气信息:
通过城市名称
OpenWeatherByCity(
apiKey: _key,
cityName: _cityName,
weatherUnits: WeatherUnits.METRIC,
color: Colors.white,
language: Languages.ENGLISH
)
通过地理坐标
OpenWeatherByLocation(
apiKey: _key,
latitude: _latitude,
longitude: _longitude,
weatherUnits: WeatherUnits.METRIC,
color: Colors.white,
language: Languages.ENGLISH
)
通过邮政编码
OpenWeatherByZipCode(
apiKey: _key,
zipCode: _zipCode,
countryCode: _countryCode,
weatherUnits: WeatherUnits.METRIC,
color: Colors.white,
language: Languages.ENGLISH
)
预构建函数获取5天天气预报
通过城市名称
WeatherForecastData weatherData = await openWeather
.fiveDaysWeatherForecastByCityName(
cityName: _cityName,
weatherUnits: WeatherUnits.METRIC,
language: _language)
.catchError((err) => print(err));
通过地理坐标
WeatherForecastData weatherData = await openWeather
.fiveDaysWeatherForecastByLocation(
latitude: _latitude,
longitude: _longitude,
weatherUnits: WeatherUnits.METRIC,
language: _language)
.catchError((err) => print(err));
通过邮政编码
WeatherForecastData weatherData = await openWeather
.fiveDaysWeatherForecastByZipCode(
zipCode: _zipCode,
countryCode: _countryCode,
weatherUnits: WeatherUnits.METRIC,
language: _language)
.catchError((err) => print(err));
示例项目
以下是一个简单的示例项目,展示了如何使用预构建的小部件来显示天气信息:
import 'package:example/screens/prebuilt_widgets_demo_screen.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const PrebuiltWidgetsScreen(),
);
}
}
更多详细信息和示例实现,请参阅 example 文件夹。
更多关于Flutter天气查询插件open_weather_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter天气查询插件open_weather_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用open_weather_client
插件来查询天气信息的示例代码。这个插件允许你通过OpenWeatherMap API获取实时的天气数据。
首先,你需要在你的pubspec.yaml
文件中添加open_weather_client
依赖:
dependencies:
flutter:
sdk: flutter
open_weather_client: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你需要获取一个OpenWeatherMap API密钥。你可以通过访问OpenWeatherMap官网并注册一个账户来获取免费的API密钥。
下面是一个完整的Flutter应用示例,展示了如何使用open_weather_client
插件来查询天气信息:
import 'package:flutter/material.dart';
import 'package:open_weather_client/open_weather_client.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Weather App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: WeatherScreen(apiKey: 'YOUR_API_KEY_HERE'), // 替换为你的OpenWeatherMap API密钥
);
}
}
class WeatherScreen extends StatefulWidget {
final String apiKey;
WeatherScreen({required this.apiKey});
@override
_WeatherScreenState createState() => _WeatherScreenState();
}
class _WeatherScreenState extends State<WeatherScreen> {
late final OpenWeatherClient client;
String? weatherData;
String? errorMessage;
@override
void initState() {
super.initState();
client = OpenWeatherClient(apiKey: widget.apiKey);
fetchWeatherData('London'); // 你可以根据需要更改城市名
}
Future<void> fetchWeatherData(String city) async {
try {
final response = await client.getWeatherByCityName(city);
setState(() {
weatherData = 'Temperature: ${response.main.temp.toInt()}°C\n'
'Weather: ${response.weather[0].description}\n'
'Humidity: ${response.main.humidity}%';
errorMessage = null;
});
} catch (e) {
setState(() {
errorMessage = 'Failed to fetch weather data: ${e.message}';
weatherData = null;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Weather App'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'Weather Information',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 16),
if (errorMessage != null)
Text(
errorMessage!,
style: TextStyle(color: Colors.red),
)
else if (weatherData != null)
Text(
weatherData!,
style: TextStyle(fontSize: 18),
)
else
CircularProgressIndicator(),
],
),
),
);
}
}
在这个示例中:
MyApp
是应用的根widget,它包含了WeatherScreen
。WeatherScreen
是一个StatefulWidget,它初始化了OpenWeatherClient
并在initState
方法中调用fetchWeatherData
函数来获取伦敦的天气数据。fetchWeatherData
函数使用client.getWeatherByCityName
方法获取指定城市的天气数据,并更新UI以显示天气信息或错误信息。- UI包含一个
Text
widget来显示天气信息,如果获取数据失败,则显示错误信息;如果数据正在加载,则显示一个CircularProgressIndicator
。
请确保将'YOUR_API_KEY_HERE'
替换为你从OpenWeatherMap获取的API密钥。
这个示例展示了如何使用open_weather_client
插件的基本功能。你可以根据需要扩展这个示例,例如添加用户输入城市名的功能,或者显示更详细的天气信息。