Rain/lib/app/ui/widgets/weather/desc/desc_container.dart

304 lines
11 KiB
Dart
Raw Normal View History

2023-06-17 20:57:57 +03:00
import 'package:flutter/material.dart';
import 'package:get/get.dart';
2024-09-06 22:07:50 +03:00
import 'package:rain/app/ui/widgets/weather/desc/desc.dart';
import 'package:rain/app/ui/widgets/weather/desc/message.dart';
import 'package:rain/app/ui/widgets/weather/status/status_data.dart';
2023-06-17 20:57:57 +03:00
2023-08-03 20:52:20 +03:00
class DescContainer extends StatefulWidget {
2023-06-17 20:57:57 +03:00
const DescContainer({
super.key,
2024-06-23 23:23:43 +03:00
this.humidity,
this.wind,
this.visibility,
this.feels,
this.evaporation,
this.precipitation,
this.direction,
this.pressure,
this.rain,
this.cloudcover,
this.windgusts,
this.uvIndex,
this.dewpoint2M,
this.precipitationProbability,
this.shortwaveRadiation,
this.apparentTemperatureMin,
this.apparentTemperatureMax,
this.uvIndexMax,
this.windDirection10MDominant,
this.windSpeed10MMax,
this.windGusts10MMax,
this.precipitationProbabilityMax,
this.rainSum,
this.precipitationSum,
required this.initiallyExpanded,
required this.title,
2023-06-17 20:57:57 +03:00
});
2024-06-23 23:23:43 +03:00
2023-07-20 10:35:31 +03:00
final int? humidity;
final double? wind;
final double? visibility;
final double? feels;
final double? evaporation;
final double? precipitation;
final int? direction;
final double? pressure;
final double? rain;
final int? cloudcover;
final double? windgusts;
final double? uvIndex;
final double? dewpoint2M;
final int? precipitationProbability;
final double? shortwaveRadiation;
2023-06-17 20:57:57 +03:00
2024-06-23 23:23:43 +03:00
final double? apparentTemperatureMin;
final double? apparentTemperatureMax;
final double? uvIndexMax;
final int? windDirection10MDominant;
final double? windSpeed10MMax;
final double? windGusts10MMax;
final int? precipitationProbabilityMax;
final double? rainSum;
final double? precipitationSum;
final bool initiallyExpanded;
final String title;
2023-08-03 20:52:20 +03:00
@override
State<DescContainer> createState() => _DescContainerState();
}
class _DescContainerState extends State<DescContainer> {
final statusData = StatusData();
final message = Message();
2023-06-17 20:57:57 +03:00
@override
Widget build(BuildContext context) {
2023-10-30 23:04:14 +05:30
final dewpoint2M = widget.dewpoint2M?.round();
final feels = widget.feels;
final visibility = widget.visibility;
final direction = widget.direction;
final wind = widget.wind;
final windgusts = widget.windgusts;
final evaporation = widget.evaporation;
final precipitation = widget.precipitation;
final rain = widget.rain;
final precipitationProbability = widget.precipitationProbability;
final humidity = widget.humidity;
final cloudcover = widget.cloudcover;
final pressure = widget.pressure;
final uvIndex = widget.uvIndex;
final shortwaveRadiation = widget.shortwaveRadiation;
2024-06-23 23:23:43 +03:00
final apparentTemperatureMin = widget.apparentTemperatureMin;
final apparentTemperatureMax = widget.apparentTemperatureMax;
final uvIndexMax = widget.uvIndexMax;
final windDirection10MDominant = widget.windDirection10MDominant;
final windSpeed10MMax = widget.windSpeed10MMax;
final windGusts10MMax = widget.windGusts10MMax;
final precipitationProbabilityMax = widget.precipitationProbabilityMax;
final rainSum = widget.rainSum;
final precipitationSum = widget.precipitationSum;
final initiallyExpanded = widget.initiallyExpanded;
final title = widget.title;
2023-07-10 21:33:43 +03:00
return Card(
2023-06-17 20:57:57 +03:00
margin: const EdgeInsets.only(bottom: 15),
2024-06-23 23:23:43 +03:00
child: ExpansionTile(
shape: const Border(),
2025-03-15 23:40:48 +03:00
title: Text(title, style: context.textTheme.labelLarge),
2024-06-23 23:23:43 +03:00
initiallyExpanded: initiallyExpanded,
children: [
Padding(
padding: const EdgeInsets.only(top: 20, bottom: 5),
child: Wrap(
alignment: WrapAlignment.spaceEvenly,
spacing: 5,
children: [
apparentTemperatureMin == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/cold.png',
value: statusData.getDegree(
apparentTemperatureMin.round(),
2024-06-23 23:23:43 +03:00
),
2025-03-15 23:40:48 +03:00
desc: 'apparentTemperatureMin'.tr,
),
2024-06-23 23:23:43 +03:00
apparentTemperatureMax == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/hot.png',
value: statusData.getDegree(
apparentTemperatureMax.round(),
2024-06-23 23:23:43 +03:00
),
2025-03-15 23:40:48 +03:00
desc: 'apparentTemperatureMax'.tr,
),
2024-06-23 23:23:43 +03:00
uvIndexMax == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/uv.png',
value: '${uvIndexMax.round()}',
desc: 'uvIndex'.tr,
message: message.getUvIndex(uvIndexMax.round()),
),
2024-06-23 23:23:43 +03:00
windDirection10MDominant == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/windsock.png',
value: '$windDirection10MDominant°',
desc: 'direction'.tr,
message: message.getDirection(windDirection10MDominant),
),
2024-06-23 23:23:43 +03:00
windSpeed10MMax == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/wind.png',
value: statusData.getSpeed(windSpeed10MMax.round()),
desc: 'wind'.tr,
),
2024-06-23 23:23:43 +03:00
windGusts10MMax == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/windgusts.png',
value: statusData.getSpeed(windGusts10MMax.round()),
desc: 'windgusts'.tr,
),
2024-06-23 23:23:43 +03:00
precipitationProbabilityMax == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/precipitation_probability.png',
value: '$precipitationProbabilityMax%',
desc: 'precipitationProbability'.tr,
),
2024-06-23 23:23:43 +03:00
rainSum == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/water.png',
value: statusData.getPrecipitation(rainSum),
desc: 'rain'.tr,
),
2024-06-23 23:23:43 +03:00
precipitationSum == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/rainfall.png',
value: statusData.getPrecipitation(precipitationSum),
desc: 'precipitation'.tr,
),
2024-06-23 23:23:43 +03:00
dewpoint2M == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/dew.png',
value: statusData.getDegree(dewpoint2M.round()),
desc: 'dewpoint'.tr,
),
2024-06-23 23:23:43 +03:00
feels == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/temperature.png',
value: statusData.getDegree(feels.round()),
desc: 'feels'.tr,
),
2024-06-23 23:23:43 +03:00
visibility == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/fog.png',
value: statusData.getVisibility(visibility),
desc: 'visibility'.tr,
),
2024-06-23 23:23:43 +03:00
direction == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/windsock.png',
value: '$direction°',
desc: 'direction'.tr,
message: message.getDirection(direction),
),
2024-06-23 23:23:43 +03:00
wind == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/wind.png',
value: statusData.getSpeed(wind.round()),
desc: 'wind'.tr,
),
2024-06-23 23:23:43 +03:00
windgusts == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/windgusts.png',
value: statusData.getSpeed(windgusts.round()),
desc: 'windgusts'.tr,
),
2024-06-23 23:23:43 +03:00
evaporation == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/evaporation.png',
value: statusData.getPrecipitation(evaporation.abs()),
desc: 'evaporation'.tr,
),
2024-06-23 23:23:43 +03:00
precipitation == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/rainfall.png',
value: statusData.getPrecipitation(precipitation),
desc: 'precipitation'.tr,
),
2024-06-23 23:23:43 +03:00
rain == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/water.png',
value: statusData.getPrecipitation(rain),
desc: 'rain'.tr,
),
2024-06-23 23:23:43 +03:00
precipitationProbability == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/precipitation_probability.png',
value: '$precipitationProbability%',
desc: 'precipitationProbability'.tr,
),
2024-06-23 23:23:43 +03:00
humidity == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/humidity.png',
value: '$humidity%',
desc: 'humidity'.tr,
),
2024-06-23 23:23:43 +03:00
cloudcover == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/cloudy.png',
value: '$cloudcover%',
desc: 'cloudcover'.tr,
),
2024-06-23 23:23:43 +03:00
pressure == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/atmospheric.png',
value: statusData.getPressure(pressure.round()),
desc: 'pressure'.tr,
message: message.getPressure(pressure.round()),
),
2024-06-23 23:23:43 +03:00
uvIndex == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/uv.png',
value: '${uvIndex.round()}',
desc: 'uvIndex'.tr,
message: message.getUvIndex(uvIndex.round()),
),
2024-06-23 23:23:43 +03:00
shortwaveRadiation == null
? Container()
: DescWeather(
2025-03-15 23:40:48 +03:00
imageName: 'assets/images/shortwave_radiation.png',
value: '${shortwaveRadiation.round()} ${'W/m2'.tr}',
desc: 'shortwaveRadiation'.tr,
),
2024-06-23 23:23:43 +03:00
],
),
),
],
2023-06-17 20:57:57 +03:00
),
);
}
}