Orientação gerada a partir de informações públicas. Apenas para referência.
WeatherPack é um pacote Flutter/Dart que simplifica a obtenção de dados meteorológicos da API do OpenWeatherMap. Ele oferece suporte à geocodificação para recuperar previsões baseadas em localização e fornece medições flexíveis de unidades (métricas, imperiais, Kelvin). Projetado para uso multiplataforma, funciona perfeitamente em Android, iOS, Web, macOS, Windows e Linux. O pacote abstrai a complexidade da API, fornecendo métodos limpos e fáceis de usar para os desenvolvedores integrarem informações meteorológicas em tempo real em seus aplicativos.
Casos de uso
Buscando o clima atual por localização
Integrando previsões do tempo em aplicativos móveis
Exibindo o tempo com unidades personalizáveis
Criando aplicativos de viagem ou atividades ao ar livre
Adicionando recursos de clima com conhecimento de localização
Criando painéis de clima
Principais recursos
Suporte de geocodificação
Várias opções de unidade
Compatibilidade multiplataforma
Integração de API simples
Dados meteorológicos em tempo real
backend da API OpenWeatherMap
Indicado para
desenvolvedores de aplicativos móveis
Criadores de aplicativos web
dispositivos meteorológicos IoT
Aplicativos de viagem e estilo de vida
Projetos de painel de tempo
Considerações
Requer uma chave de API do OpenWeatherMap
Depende da conectividade de rede
Limitado ao serviço OpenWeatherMap
Pode ser necessário o tratamento de limite de taxa
A configuração inicial exige a configuração da API
Não adequado para acesso offline ao tempo
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
weather_pack
A quick way to get access to weather conditions 🌦.
Put a on Pub and favorite ⭐ on Github to keep up with changes and not miss new releases!
Why choose this library?
basic:
🚲 Easy to use - you only need the APIKEY.
🏝 Built-in geocoding - search for locations by assumed names or by coordinates.
🩺 Various units of measurement - speed, temperature, pressure and cardinal points.
🌤 There are original weather icons.
advanced: (Click to open)
🔮 At least one release application is already based on this package. Therefore, there is an
additional guarantee of security and timely updates of this package.
🔓 There is a method for checking your api for correctness.
🧱 It is very easy to customize data models. Create your own data models and take only what
you need from the built-in ones.
🧾 The code is well documented and each class is labeled and decoded. There are unit tests
for the main functions of the package.
🦺 Safe unpacking of types. If the server stops outputting values - your weather model
will have a null field and the application will not crash.
🔧 This package has no unnecessary dependencies and contains minimal code.
Also, all platforms are supported.
*Additionally, pull package locally to examine example folder:
flutter pub unpack
weather_in_console - Dart console application
create_code_for_readme - all examples from current manual
example - easy use
Getting Started
The easiest way to get the current weather:
Future<void> main() async {
const api = 'YOUR_APIKEY'; // TODO: change to your openweathermap APIkeyfinal wService = WeatherService(api);
// get the current weather in AmsterdamfinalWeatherCurrent currently = await wService.currentWeatherByLocation(
latitude: 52.374, longitude: 4.88969);
print(currently);
}
You can also change the request language:
final lang = WeatherLanguage.arabic;
final wService = WeatherService(api, language: lang);
You can use the lang parameter to get the output in your language.
Translation is applied for the city name and description fields.
Usage weather service
Now there are two weather models - WeatherCurrent and WeatherOneCall.
WeatherOneCall includes:
WeatherCurrent
List<WeatherHourly>
List<WeatherMinutely>
List<WeatherDaily>
List<WeatherAlert>
How to use?
You can get the weather in the following way:
Future<void> getOnecallWeatherWays({String api = 'Your_APIkey'}) async {
final wService2_5 = WeatherService(api, oneCallApi: OneCallApi.api_2_5);
finalWeatherOneCall onecall2_5 = await wService2_5.oneCallWeatherByLocation(
latitude: 52.374, longitude: 4.88969);
print(onecall2_5);
// if you use the "One Call API 3.0" subscription that...final wService3_0 = WeatherService(api, oneCallApi: OneCallApi.api_3_0);
finalWeatherOneCall onecall3_0 = await wService3_0.oneCallWeatherByLocation(
latitude: 52.374, longitude: 4.88969);
print(onecall3_0);
}
Why do you only use the weather search by coordinates?
According to the website OWM:
Please use Geocoder API if you need automatic convert city names and zip-codes to geo
coordinates and the other way around.
Please note that built-in geocoder has been deprecated. Although it is still available for use,
bug fixing and updates are no longer available for this functionality.
Usage geocoding service
GeocodingService is a service for easy location search when working with geographical names
and coordinates. Supports both the direct and reverse methods:
Direct geocoding converts the specified name of a location or zip/post code into
the exact geographical coordinates;
Reverse geocoding converts the geographical coordinates into the names of the nearby locations;
To find using country code and zip code use zip geocoding:
finalPlaceGeocode place = await gService.getLocationByZipAndCountryCode(
zipCode: 'E14',
countryCode: 'GB',
);
Usage units measure
By default, all weather models, e.g. WeatherCurrent, have measurable values of type double.
To display the data in a convenient format, it is necessary use the conversion method value
or valueToString:
voidworksTempUnits({
double temp = 270.78, // ex. received from [WeatherCurrent.temp]int precision = 3,
Temp unitsMeasure = Temp.celsius,
}) {
// The default temperature is measured in Kelvin of the `double` type.// We need the temperature to be displayed in Celsius to 3 decimal placesprint(unitsMeasure.value(temp, precision)); // `-2.37` type `double`print(unitsMeasure.valueToString(temp, precision)); // `-2.370` type `String`// if precision is 0:print(unitsMeasure.value(temp, 0)); // `-2.0` type `double`print(unitsMeasure.valueToString(temp, 0)); // `-2` type `String`
}
By and large, the valueToString() method is needed to display correctly in ui,
and the value() method is for accurate calculations.
There are several units of measurement:
Units of measure
Class
Supported units
Conversion
Temperature
Temp
kelvin, celsius, fahrenheit
+
Speed
Speed
ms, mph, kph
+
Pressure
Pressure
hectoPa, mbar, mmHg, kPa, atm, inHg
+
Cardinal points
SideOfTheWorld
n, ne, e, se, s, sw, w, nw
+(another)
💡 Tip: The SideOfTheWorld enum contains a static method fromDegrees() for converting degrees
to cardinal directions.
Exception handling
Each of the methods in the WeatherService and GeocodingService services can throw an OwmApiException exception. You can process them as follows:
For GeocodingService and WeatherService you can create a custom OWMBuilder for debugging and logging cases:
classOWMBuilderCustomextendsOWMBuilder{
/// We output the url to the console for debugging and logging@overrideFuture<T> getData<T>(
{requiredUri uri, required T Function(dynamic data) builder}) {
print(uri);
returnsuper.getData(uri: uri, builder: builder);
}
}
voidworkOwmBuilder({
String api = 'your_apikey',
}) async {
final customOWMBuilder = OWMBuilderCustom();
final gService = GeocodingService(api, owmBuilder: customOWMBuilder);
finalList<PlaceGeocode> places = await gService.getLocationByCoordinates(
latitude: 52.374, longitude: 4.88969);
print(places);
}
For OWMTestService you can create a custom Client. A more low-level way, would require an explicit dependency on the http package:
classCustomClientextendsIOClient{
/// We output the url to the console@overrideFuture<Response> get(Uri url, {Map<String, String>? headers}) {
print(url);
returnsuper.get(url, headers: headers);
}
}
/// We output the url to the console for debuggingvoidworkCustomClient({
String api = 'your_apikey',
}) async {
final customClient = CustomClient();
final testService = OWMTestService(api, customClient);
finalbool isValidKey = await testService.isValidApikey();
print(isValidKey);
}
Usage weather icons
You can use weather icons provided by the OWM service. See more about weather conditions.
Icons are stored locally in this package at the path assets/weather_icons/.
They are ordered according to Declaring resolution-aware image assets.
This reflects the following correspondences:
WidgetgetWeatherIcon(WeatherCurrent weather) {
returnImage.asset(
'assets/weather_icons/${weather.weatherIcon}.png', // icon path
package: 'weather_pack', // name package
filterQuality: FilterQuality.high, // optional
errorBuilder: (c, e, s) => Text(e), // will return the widget in case of an error
);
}
In this case, you can use the best quality regardless of platform resolution by specifying @4 to path:
'assets/weather_icons/@4/$weatherIcon.png'
API key testing
It is possible to test the API key.
To do this, the OWMTestService class has a method isValidApikeyForOneCall:
/// If the apikey is valid, `OWMApiTest` methods will return `true`Future<void> testAPIkey({
String testedAPIkey = 'your_apikey',
}) async {
// checking key for geocoding service and for (fetching WeatherCurrent)finalbool isValid = awaitOWMTestService(testedAPIkey).isValidApikey();
// checking key for "One Call API 2.5" service (fetching WeatherOneCall)finalbool isValidOneCall2 = awaitOWMTestService(testedAPIkey)
.isValidApikeyForOneCall(OneCallApi.api_2_5);
// or// checking key for "One Call by Call 3.0" service (fetching WeatherOneCall)finalbool isValidOneCall3 = awaitOWMTestService(testedAPIkey)
.isValidApikeyForOneCall(OneCallApi.api_3_0);
}
Resources
folder example.
There is a simple example of how to use the basic functions of the package, as well as a console mini-application without using flutter