display more data in daily weather widget, display weather icons
This commit is contained in:
@@ -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")
|
||||||
|
]),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,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'];
|
||||||
|
|||||||
Reference in New Issue
Block a user