display more data in daily weather widget, display weather icons

This commit is contained in:
Konstantin Kollar
2022-09-02 17:10:12 +02:00
parent 20d197c505
commit 1b4b82369b
3 changed files with 115 additions and 18 deletions
+64 -16
View File
@@ -25,22 +25,16 @@ class _CompactWeatherDataState extends State<CompactWeatherData> {
"${DateFormat('EEEE').format(widget.dwm.dateOfDay())}, ${widget.dwm.dateOfDay().day}.${widget.dwm.dateOfDay().month}.", "${DateFormat('EEEE').format(widget.dwm.dateOfDay())}, ${widget.dwm.dateOfDay().day}.${widget.dwm.dateOfDay().month}.",
style: Theme.of(context).textTheme.headline5, style: Theme.of(context).textTheme.headline5,
), ),
const SizedBox(height: 20), const SizedBox(height: 10),
Icon(weatherIcon(widget.dwm.prevalentWeatherIcon())), Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
Row(mainAxisAlignment: MainAxisAlignment.center, children: [ _weatherData(),
const Icon(WeatherIcons.thermometer), Expanded(
Text( child: Padding(
"${widget.dwm.dailyMaxTemp()} °C", padding: const EdgeInsets.all(35),
style: Theme.of(context).textTheme.bodyLarge, child: FittedBox(
) fit: BoxFit.fill,
]), child: Icon(weatherIcon(
const SizedBox(height: 20), widget.dwm.prevalentWeatherIcon()))))),
Row(mainAxisAlignment: MainAxisAlignment.center, children: [
const Icon(WeatherIcons.thermometer_exterior),
Text(
"${widget.dwm.dailyMinTemp()} °C",
style: Theme.of(context).textTheme.bodyLarge,
)
]), ]),
const SizedBox(height: 20), const SizedBox(height: 20),
Row( Row(
@@ -67,4 +61,58 @@ class _CompactWeatherDataState extends State<CompactWeatherData> {
], ],
); );
} }
Widget _weatherData() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Text(
"${widget.dwm.dailyMaxTemp()} °C ",
style: Theme.of(context)
.textTheme
.titleLarge!
.copyWith(fontStyle: FontStyle.normal),
),
const Icon(
Icons.circle,
size: 10,
color: Colors.grey,
),
Text(
" ${widget.dwm.dailyMinTemp()} °C",
style: Theme.of(context)
.textTheme
.titleLarge!
.copyWith(fontStyle: FontStyle.normal, color: Colors.grey),
)
],
),
Row(crossAxisAlignment: CrossAxisAlignment.end, children: [
const Icon(WeatherIcons.barometer),
const SizedBox(width: 10),
Text("${widget.dwm.dailyAveragePressure().toString()} hPa")
]),
const SizedBox(height: 5),
Row(crossAxisAlignment: CrossAxisAlignment.end, children: [
const Icon(WeatherIcons.raindrop),
const SizedBox(width: 10),
Text("${widget.dwm.dailyPrecipitation().toString()} mm")
]),
const SizedBox(height: 5),
Row(crossAxisAlignment: CrossAxisAlignment.end, children: [
const Icon(WeatherIcons.cloud),
const SizedBox(width: 10),
Text("${widget.dwm.dailyAverageCloudCover().toString()} %")
]),
const SizedBox(height: 5),
Row(crossAxisAlignment: CrossAxisAlignment.end, children: [
const Icon(WeatherIcons.windy),
const SizedBox(width: 10),
Text("${widget.dwm.dailyAverageWindSpeed().toString()} km/h")
]),
],
);
}
} }
+49
View File
@@ -18,6 +18,55 @@ class DailyWeatherModel {
} }
} }
int dailyAveragePressure() {
double pressureSum = 0;
int failuresInData = 0;
for (HourlyWeatherModel forecast in hourlyForecasts) {
if (forecast.pressure != null) {
pressureSum = pressureSum + forecast.pressure!;
} else {
failuresInData += 1;
}
}
return (pressureSum / (hourlyForecasts.length - failuresInData)).round();
}
int dailyPrecipitation() {
double precipitation = 0;
for (HourlyWeatherModel forecast in hourlyForecasts) {
if (forecast.precipitation != null) {
precipitation = precipitation + forecast.precipitation!;
}
}
return precipitation.round();
}
int dailyAverageCloudCover() {
double cloudCoverSum = 0;
int failuresInData = 0;
for (HourlyWeatherModel forecast in hourlyForecasts) {
if (forecast.cloudCover != null) {
cloudCoverSum = cloudCoverSum + forecast.cloudCover!;
} else {
failuresInData += 1;
}
}
return (cloudCoverSum / (hourlyForecasts.length - failuresInData)).round();
}
int dailyAverageWindSpeed() {
double windSpeedSum = 0;
int failuresInData = 0;
for (HourlyWeatherModel forecast in hourlyForecasts) {
if (forecast.windSpeed != null) {
windSpeedSum = windSpeedSum + forecast.windSpeed!;
} else {
failuresInData += 1;
}
}
return (windSpeedSum / (hourlyForecasts.length - failuresInData)).round();
}
String dailyAverageTemp() { String dailyAverageTemp() {
double tempSum = 0; double tempSum = 0;
for (var forecast in hourlyForecasts) { for (var forecast in hourlyForecasts) {
+2 -2
View File
@@ -2,7 +2,7 @@ class HourlyWeatherModel {
late DateTime timestamp; late DateTime timestamp;
String? sourceId; String? sourceId;
double? precipitation; double? precipitation;
int? pressure; double? pressure;
int? sunshine; int? sunshine;
late double temperature; late double temperature;
int? windDirection; int? windDirection;
@@ -21,7 +21,7 @@ class HourlyWeatherModel {
HourlyWeatherModel.fromJson(Map<String, dynamic> json) { HourlyWeatherModel.fromJson(Map<String, dynamic> json) {
sourceId = json['source_id'].toString(); sourceId = json['source_id'].toString();
precipitation = json['precipitation']; precipitation = json['precipitation'];
pressure = json['pressure']; pressure = json['pressure_msl'];
sunshine = json['sundshine']; sunshine = json['sundshine'];
temperature = json['temperature']; temperature = json['temperature'];
windDirection = json['wind_direction']; windDirection = json['wind_direction'];