diff --git a/lib/notifiers/unit_settings_notifier.dart b/lib/notifiers/unit_settings_notifier.dart index 1d6c2b1cf..c7f9a9f1e 100644 --- a/lib/notifiers/unit_settings_notifier.dart +++ b/lib/notifiers/unit_settings_notifier.dart @@ -17,6 +17,7 @@ class UnitSettingsNotifier extends ChangeNotifier { + // Getters String get tempUnit => _tempUnit; String get windUnit => _windUnit; @@ -32,6 +33,7 @@ class UnitSettingsNotifier extends ChangeNotifier { + UnitSettingsNotifier() { _loadAllUnits(); } @@ -51,6 +53,7 @@ class UnitSettingsNotifier extends ChangeNotifier { + notifyListeners(); } @@ -136,5 +139,4 @@ class UnitSettingsNotifier extends ChangeNotifier { } - } diff --git a/lib/screens/extended_widgets.dart b/lib/screens/extended_widgets.dart index ff64d1cf6..ae1ce6fd8 100644 --- a/lib/screens/extended_widgets.dart +++ b/lib/screens/extended_widgets.dart @@ -980,7 +980,7 @@ final duskFormatted = formatInstantToLocalTime(dusk, timeUnit: timeFormatDUSKDAW children: [ Text("${PreferencesHelper.getString("selectedWindUnit") == 'M/s' ? formattedAvgWindSpeed.toStringAsFixed(1) : formattedAvgWindSpeed.round()}", style: TextStyle(fontSize: 50, color: Theme.of(context).colorScheme.secondary, fontWeight: FontWeight.w500),), Padding(padding: EdgeInsets.only(bottom: 11, left: 8), - child: Text(PreferencesHelper.getString("selectedWindUnit") ?? 'Km/h', style: TextStyle(fontSize: 20, color: Theme.of(context).colorScheme.onSurfaceVariant, fontWeight: FontWeight.w500),)) + child: Text(localizeWindUnit(windUnit, context.locale), style: TextStyle(fontSize: 20, color: Theme.of(context).colorScheme.onSurfaceVariant, fontWeight: FontWeight.w500),)) ], ) diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 99e0be413..afd799319 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -284,6 +284,18 @@ class _SettingsScreenState extends State { }, ), + SettingSwitchTile( + icon: Icon(Symbols.warning, fill: 1, weight: 500), + title: Text("weather_alerts".tr()), + description: Text("show_alerts_home_page_sub".tr()), + toggled: PreferencesHelper.getBool("showAlerts") ?? true, + onChanged: (value) { + PreferencesHelper.setBool("showAlerts", value); + setState(() { + }); + }, + ), + SettingActionTile( icon: Icon(Symbols.nest_farsight_weather, fill: 1, weight: 500), title: Text('weather_models'.tr()), diff --git a/lib/services/fetch_data.dart b/lib/services/fetch_data.dart index 69c3af09a..37c840f8b 100644 --- a/lib/services/fetch_data.dart +++ b/lib/services/fetch_data.dart @@ -45,25 +45,38 @@ class WeatherService { 'forecast_hours': '1', }); - final alertUri = Uri.parse('https://api.weatherapi.com/v1/alerts.json').replace(queryParameters: { - 'key': dotenv.env['API_KEY_WEATHERAPI']!.toString(), - 'q': '$lat,$lon', - }); // final response = await http.get(uri); // final data = json.decode(response.body) as Map; - + bool showAlerts = PreferencesHelper.getBool("showAlerts") ?? true; - final responses = await Future.wait([ + // Prepare list of HTTP requests (always include weather and air quality) + final requests = >[ http.get(uri), http.get(airQualityUri), - http.get(alertUri), - ]); + ]; + // Conditionally add alerts request only if user wants them + if (showAlerts) { + final alertUri = Uri.parse('https://api.weatherapi.com/v1/alerts.json').replace(queryParameters: { + 'key': dotenv.env['API_KEY_WEATHERAPI']!.toString(), + 'q': '$lat,$lon', + }); + requests.add(http.get(alertUri)); + } + + // Execute all HTTP requests in parallel + final responses = await Future.wait(requests); + + // Parse responses final weatherData = json.decode(responses[0].body) as Map; final airQualityData = json.decode(responses[1].body) as Map; - final alertData = json.decode(responses[2].body) as Map; + + // Conditionally decode alert data if it was fetched + final alertData = showAlerts && responses.length > 2 + ? json.decode(responses[2].body) as Map + : {}; // Check if we need fallback data for missing fields Map finalWeatherData = weatherData;