diff --git a/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/control_panel_screen.dart b/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/control_panel_screen.dart index 19cf1254..61b0ae59 100644 --- a/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/control_panel_screen.dart +++ b/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/control_panel_screen.dart @@ -21,6 +21,21 @@ class ControlPanelScreen extends ConsumerWidget { final theme = ref.watch(themePortProvider); final asyncState = ref.watch(controlPanelViewModelProvider); + ref.listen( + controlPanelViewModelProvider.select( + (async) => async.value?.positionsError ?? false, + ), + (_, hasError) { + if (hasError) { + showTopSnackbar( + context, + message: context.translate(I18n.errorPositions), + type: MessageType.error, + ); + } + }, + ); + return Scaffold( backgroundColor: theme.getColorFor(ThemeCode.backgroundPrimary), body: asyncState.when( diff --git a/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_model.dart b/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_model.dart index 51e412e1..b5fda4a5 100644 --- a/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_model.dart +++ b/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_model.dart @@ -27,14 +27,7 @@ class ControlPanelViewModel extends AsyncNotifier { final selected = await ref.watch(selectedDeviceProvider.future); - final positionLists = await Future.wait>( - devices.map( - (d) => _controlPanelRepository.getLatestPositions( - deviceId: d.identificator, - ), - ), - ); - final latestPositions = _pickLatest(positionLists); + final (latestPositions, hadError) = await _fetchPositions(devices); final selectedPosition = selected != null ? latestPositions .where((p) => p.deviceIdentificator == selected.identificator) @@ -46,6 +39,7 @@ class ControlPanelViewModel extends AsyncNotifier { selectedDevice: selected, positions: latestPositions, selectedPosition: selectedPosition, + positionsError: hadError, ); } @@ -53,16 +47,9 @@ class ControlPanelViewModel extends AsyncNotifier { final current = state.value; if (current == null || current.devices.isEmpty) return; - final positionLists = await Future.wait>( - current.devices.map( - (d) => _controlPanelRepository.getLatestPositions( - deviceId: d.identificator, - ), - ), - ); + final (latestPositions, hadError) = await _fetchPositions(current.devices); if (!ref.mounted) return; - final latestPositions = _pickLatest(positionLists); final selectedPosition = current.selectedDevice != null ? latestPositions .where( @@ -77,12 +64,30 @@ class ControlPanelViewModel extends AsyncNotifier { current.copyWith( positions: latestPositions, selectedPosition: selectedPosition, + positionsError: hadError, ), ); unawaited(_tracking.legacyControlPanelPositionsRefreshed()); } + Future<(List, bool)> _fetchPositions( + List devices, + ) async { + var hadError = false; + final positionLists = await Future.wait>( + devices.map( + (device) => _controlPanelRepository + .getLatestPositions(deviceId: device.identificator) + .catchError((_) { + hadError = true; + return []; + }), + ), + ); + return (_pickLatest(positionLists), hadError); + } + Future setSelectedDevice(DeviceEntity device) async { final current = state.value; if (current == null) return; diff --git a/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_state.dart b/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_state.dart index 2fb2ab17..5523fa65 100644 --- a/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_state.dart +++ b/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_state.dart @@ -11,5 +11,6 @@ abstract class ControlPanelViewState with _$ControlPanelViewState { DeviceEntity? selectedDevice, @Default([]) List positions, PositionEntity? selectedPosition, + @Default(false) bool positionsError, }) = _ControlPanelViewState; } diff --git a/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_state.freezed.dart b/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_state.freezed.dart index bf84d819..43dd2ff7 100644 --- a/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_state.freezed.dart +++ b/modules/legacy/modules/control_panel/lib/src/features/control_panel/presentation/state/control_panel_view_state.freezed.dart @@ -14,7 +14,7 @@ T _$identity(T value) => value; /// @nodoc mixin _$ControlPanelViewState { - List get devices; DeviceEntity? get selectedDevice; List get positions; PositionEntity? get selectedPosition; + List get devices; DeviceEntity? get selectedDevice; List get positions; PositionEntity? get selectedPosition; bool get positionsError; /// Create a copy of ControlPanelViewState /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -25,16 +25,16 @@ $ControlPanelViewStateCopyWith get copyWith => _$ControlP @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is ControlPanelViewState&&const DeepCollectionEquality().equals(other.devices, devices)&&(identical(other.selectedDevice, selectedDevice) || other.selectedDevice == selectedDevice)&&const DeepCollectionEquality().equals(other.positions, positions)&&(identical(other.selectedPosition, selectedPosition) || other.selectedPosition == selectedPosition)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is ControlPanelViewState&&const DeepCollectionEquality().equals(other.devices, devices)&&(identical(other.selectedDevice, selectedDevice) || other.selectedDevice == selectedDevice)&&const DeepCollectionEquality().equals(other.positions, positions)&&(identical(other.selectedPosition, selectedPosition) || other.selectedPosition == selectedPosition)&&(identical(other.positionsError, positionsError) || other.positionsError == positionsError)); } @override -int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(devices),selectedDevice,const DeepCollectionEquality().hash(positions),selectedPosition); +int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(devices),selectedDevice,const DeepCollectionEquality().hash(positions),selectedPosition,positionsError); @override String toString() { - return 'ControlPanelViewState(devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition)'; + return 'ControlPanelViewState(devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition, positionsError: $positionsError)'; } @@ -45,7 +45,7 @@ abstract mixin class $ControlPanelViewStateCopyWith<$Res> { factory $ControlPanelViewStateCopyWith(ControlPanelViewState value, $Res Function(ControlPanelViewState) _then) = _$ControlPanelViewStateCopyWithImpl; @useResult $Res call({ - List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition + List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition, bool positionsError }); @@ -62,13 +62,14 @@ class _$ControlPanelViewStateCopyWithImpl<$Res> /// Create a copy of ControlPanelViewState /// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? devices = null,Object? selectedDevice = freezed,Object? positions = null,Object? selectedPosition = freezed,}) { +@pragma('vm:prefer-inline') @override $Res call({Object? devices = null,Object? selectedDevice = freezed,Object? positions = null,Object? selectedPosition = freezed,Object? positionsError = null,}) { return _then(_self.copyWith( devices: null == devices ? _self.devices : devices // ignore: cast_nullable_to_non_nullable as List,selectedDevice: freezed == selectedDevice ? _self.selectedDevice : selectedDevice // ignore: cast_nullable_to_non_nullable as DeviceEntity?,positions: null == positions ? _self.positions : positions // ignore: cast_nullable_to_non_nullable as List,selectedPosition: freezed == selectedPosition ? _self.selectedPosition : selectedPosition // ignore: cast_nullable_to_non_nullable -as PositionEntity?, +as PositionEntity?,positionsError: null == positionsError ? _self.positionsError : positionsError // ignore: cast_nullable_to_non_nullable +as bool, )); } /// Create a copy of ControlPanelViewState @@ -177,10 +178,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function( List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function( List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition, bool positionsError)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { case _ControlPanelViewState() when $default != null: -return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition);case _: +return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition,_that.positionsError);case _: return orElse(); } @@ -198,10 +199,10 @@ return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selecte /// } /// ``` -@optionalTypeArgs TResult when(TResult Function( List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function( List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition, bool positionsError) $default,) {final _that = this; switch (_that) { case _ControlPanelViewState(): -return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition);case _: +return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition,_that.positionsError);case _: throw StateError('Unexpected subclass'); } @@ -218,10 +219,10 @@ return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selecte /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function( List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function( List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition, bool positionsError)? $default,) {final _that = this; switch (_that) { case _ControlPanelViewState() when $default != null: -return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition);case _: +return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selectedPosition,_that.positionsError);case _: return null; } @@ -233,7 +234,7 @@ return $default(_that.devices,_that.selectedDevice,_that.positions,_that.selecte class _ControlPanelViewState implements ControlPanelViewState { - const _ControlPanelViewState({final List devices = const [], this.selectedDevice, final List positions = const [], this.selectedPosition}): _devices = devices,_positions = positions; + const _ControlPanelViewState({final List devices = const [], this.selectedDevice, final List positions = const [], this.selectedPosition, this.positionsError = false}): _devices = devices,_positions = positions; final List _devices; @@ -252,6 +253,7 @@ class _ControlPanelViewState implements ControlPanelViewState { } @override final PositionEntity? selectedPosition; +@override@JsonKey() final bool positionsError; /// Create a copy of ControlPanelViewState /// with the given fields replaced by the non-null parameter values. @@ -263,16 +265,16 @@ _$ControlPanelViewStateCopyWith<_ControlPanelViewState> get copyWith => __$Contr @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _ControlPanelViewState&&const DeepCollectionEquality().equals(other._devices, _devices)&&(identical(other.selectedDevice, selectedDevice) || other.selectedDevice == selectedDevice)&&const DeepCollectionEquality().equals(other._positions, _positions)&&(identical(other.selectedPosition, selectedPosition) || other.selectedPosition == selectedPosition)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _ControlPanelViewState&&const DeepCollectionEquality().equals(other._devices, _devices)&&(identical(other.selectedDevice, selectedDevice) || other.selectedDevice == selectedDevice)&&const DeepCollectionEquality().equals(other._positions, _positions)&&(identical(other.selectedPosition, selectedPosition) || other.selectedPosition == selectedPosition)&&(identical(other.positionsError, positionsError) || other.positionsError == positionsError)); } @override -int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(_devices),selectedDevice,const DeepCollectionEquality().hash(_positions),selectedPosition); +int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(_devices),selectedDevice,const DeepCollectionEquality().hash(_positions),selectedPosition,positionsError); @override String toString() { - return 'ControlPanelViewState(devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition)'; + return 'ControlPanelViewState(devices: $devices, selectedDevice: $selectedDevice, positions: $positions, selectedPosition: $selectedPosition, positionsError: $positionsError)'; } @@ -283,7 +285,7 @@ abstract mixin class _$ControlPanelViewStateCopyWith<$Res> implements $ControlPa factory _$ControlPanelViewStateCopyWith(_ControlPanelViewState value, $Res Function(_ControlPanelViewState) _then) = __$ControlPanelViewStateCopyWithImpl; @override @useResult $Res call({ - List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition + List devices, DeviceEntity? selectedDevice, List positions, PositionEntity? selectedPosition, bool positionsError }); @@ -300,13 +302,14 @@ class __$ControlPanelViewStateCopyWithImpl<$Res> /// Create a copy of ControlPanelViewState /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? devices = null,Object? selectedDevice = freezed,Object? positions = null,Object? selectedPosition = freezed,}) { +@override @pragma('vm:prefer-inline') $Res call({Object? devices = null,Object? selectedDevice = freezed,Object? positions = null,Object? selectedPosition = freezed,Object? positionsError = null,}) { return _then(_ControlPanelViewState( devices: null == devices ? _self._devices : devices // ignore: cast_nullable_to_non_nullable as List,selectedDevice: freezed == selectedDevice ? _self.selectedDevice : selectedDevice // ignore: cast_nullable_to_non_nullable as DeviceEntity?,positions: null == positions ? _self._positions : positions // ignore: cast_nullable_to_non_nullable as List,selectedPosition: freezed == selectedPosition ? _self.selectedPosition : selectedPosition // ignore: cast_nullable_to_non_nullable -as PositionEntity?, +as PositionEntity?,positionsError: null == positionsError ? _self.positionsError : positionsError // ignore: cast_nullable_to_non_nullable +as bool, )); } diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/datasource/do_not_disturb_remote_datasource.dart b/modules/legacy/modules/device_management/lib/src/core/data/datasources/do_not_disturb_remote_datasource.dart similarity index 77% rename from modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/datasource/do_not_disturb_remote_datasource.dart rename to modules/legacy/modules/device_management/lib/src/core/data/datasources/do_not_disturb_remote_datasource.dart index 79a6f72e..ba48fa8b 100644 --- a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/datasource/do_not_disturb_remote_datasource.dart +++ b/modules/legacy/modules/device_management/lib/src/core/data/datasources/do_not_disturb_remote_datasource.dart @@ -1,4 +1,4 @@ -import '../../domain/do_not_disturb_period.dart'; +import '../../../features/do_not_disturb/domain/do_not_disturb_period.dart'; abstract class DoNotDisturbRemoteDatasource { Future getSchedule({required String identificator}); diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/datasource/do_not_disturb_remote_datasource_impl.dart b/modules/legacy/modules/device_management/lib/src/core/data/datasources/do_not_disturb_remote_datasource_impl.dart similarity index 96% rename from modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/datasource/do_not_disturb_remote_datasource_impl.dart rename to modules/legacy/modules/device_management/lib/src/core/data/datasources/do_not_disturb_remote_datasource_impl.dart index c215f494..c6ead853 100644 --- a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/datasource/do_not_disturb_remote_datasource_impl.dart +++ b/modules/legacy/modules/device_management/lib/src/core/data/datasources/do_not_disturb_remote_datasource_impl.dart @@ -1,6 +1,6 @@ import 'package:sf_infrastructure/sf_infrastructure.dart'; -import '../../domain/do_not_disturb_period.dart'; +import '../../../features/do_not_disturb/domain/do_not_disturb_period.dart'; import '../models/do_not_disturb_response_model.dart'; import 'do_not_disturb_remote_datasource.dart'; diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/models/do_not_disturb_response_model.dart b/modules/legacy/modules/device_management/lib/src/core/data/models/do_not_disturb_response_model.dart similarity index 100% rename from modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/models/do_not_disturb_response_model.dart rename to modules/legacy/modules/device_management/lib/src/core/data/models/do_not_disturb_response_model.dart diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/models/do_not_disturb_response_model.freezed.dart b/modules/legacy/modules/device_management/lib/src/core/data/models/do_not_disturb_response_model.freezed.dart similarity index 100% rename from modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/models/do_not_disturb_response_model.freezed.dart rename to modules/legacy/modules/device_management/lib/src/core/data/models/do_not_disturb_response_model.freezed.dart diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/models/do_not_disturb_response_model.g.dart b/modules/legacy/modules/device_management/lib/src/core/data/models/do_not_disturb_response_model.g.dart similarity index 100% rename from modules/legacy/modules/device_management/lib/src/features/do_not_disturb/data/models/do_not_disturb_response_model.g.dart rename to modules/legacy/modules/device_management/lib/src/core/data/models/do_not_disturb_response_model.g.dart diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/providers/do_not_disturb_providers.dart b/modules/legacy/modules/device_management/lib/src/core/providers/do_not_disturb_providers.dart similarity index 70% rename from modules/legacy/modules/device_management/lib/src/features/do_not_disturb/providers/do_not_disturb_providers.dart rename to modules/legacy/modules/device_management/lib/src/core/providers/do_not_disturb_providers.dart index 77e3a478..5aba4103 100644 --- a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/providers/do_not_disturb_providers.dart +++ b/modules/legacy/modules/device_management/lib/src/core/providers/do_not_disturb_providers.dart @@ -2,8 +2,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:get_it/get_it.dart'; import 'package:sf_infrastructure/sf_infrastructure.dart'; -import '../data/datasource/do_not_disturb_remote_datasource.dart'; -import '../data/datasource/do_not_disturb_remote_datasource_impl.dart'; +import '../data/datasources/do_not_disturb_remote_datasource.dart'; +import '../data/datasources/do_not_disturb_remote_datasource_impl.dart'; final doNotDisturbRemoteDatasourceProvider = Provider( diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/do_not_disturb_screen.dart b/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/do_not_disturb_screen.dart index 8770685b..d275a9dd 100644 --- a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/do_not_disturb_screen.dart +++ b/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/do_not_disturb_screen.dart @@ -96,7 +96,6 @@ class DoNotDisturbScreen extends ConsumerWidget { entry.key, entry.value, ), - onDelete: () => vm.removePeriod(entry.key), ), ); }), diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/state/do_not_disturb_view_model.dart b/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/state/do_not_disturb_view_model.dart index 8451fb97..ddf98925 100644 --- a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/state/do_not_disturb_view_model.dart +++ b/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/state/do_not_disturb_view_model.dart @@ -4,9 +4,9 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:legacy_shared/legacy_shared.dart'; import 'package:sf_tracking/sf_tracking.dart'; -import '../../data/datasource/do_not_disturb_remote_datasource.dart'; +import '../../../../core/data/datasources/do_not_disturb_remote_datasource.dart'; import '../../domain/do_not_disturb_period.dart'; -import '../../providers/do_not_disturb_providers.dart'; +import '../../../../core/providers/do_not_disturb_providers.dart'; import 'do_not_disturb_view_state.dart'; final doNotDisturbViewModelProvider = diff --git a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/widgets/do_not_disturb_period_card.dart b/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/widgets/do_not_disturb_period_card.dart index 7d83646d..1302267c 100644 --- a/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/widgets/do_not_disturb_period_card.dart +++ b/modules/legacy/modules/device_management/lib/src/features/do_not_disturb/presentation/widgets/do_not_disturb_period_card.dart @@ -9,13 +9,11 @@ import 'week_day_row.dart'; class DoNotDisturbPeriodCard extends ConsumerWidget { final DoNotDisturbPeriod period; final VoidCallback onEdit; - final VoidCallback onDelete; const DoNotDisturbPeriodCard({ super.key, required this.period, required this.onEdit, - required this.onDelete, }); @override @@ -60,15 +58,6 @@ class DoNotDisturbPeriodCard extends ConsumerWidget { color: primaryColor, ), ), - SizedBox(width: SizeUtils.getByScreen(small: 12, big: 10)), - GestureDetector( - onTap: onDelete, - child: Icon( - Icons.delete_outline, - size: SizeUtils.getByScreen(small: 20, big: 18), - color: Colors.red.shade400, - ), - ), ], ), SizedBox(height: SizeUtils.getByScreen(small: 8, big: 6)), diff --git a/packages/sf_localizations/assets/l10n/de.json b/packages/sf_localizations/assets/l10n/de.json index d5c9ffc5..f6541f30 100644 --- a/packages/sf_localizations/assets/l10n/de.json +++ b/packages/sf_localizations/assets/l10n/de.json @@ -673,6 +673,7 @@ "errorPedometer": "Der Schrittzähler konnte nicht aktualisiert werden", "errorContactsMin": "Das Gerät muss mindestens einen Kontakt haben", "errorContactsMax": "Maximale Kontaktanzahl für dieses Gerät erreicht", + "errorPositions": "Positionen konnten nicht geladen werden", "errorSosContactsMax": "Maximale SOS-Kontaktanzahl für dieses Gerät erreicht", "customBackground": "Benutzerdefiniertes Hintergrundbild", "backgroundImageDescription": "Legen Sie ein Foto als benutzerdefinierten Bildschirmschoner für das Gerät fest", diff --git a/packages/sf_localizations/assets/l10n/en.json b/packages/sf_localizations/assets/l10n/en.json index 38487303..d319c246 100755 --- a/packages/sf_localizations/assets/l10n/en.json +++ b/packages/sf_localizations/assets/l10n/en.json @@ -825,6 +825,7 @@ "errorPedometer": "Could not update pedometer", "errorContactsMin": "The device must have at least one contact", "errorContactsMax": "Maximum contacts reached for this device", + "errorPositions": "Could not load positions", "errorSosContactsMax": "Maximum SOS contacts reached for this device", "customBackground": "Custom background image", "backgroundImageDescription": "Set a photo as a custom screensaver for the device", diff --git a/packages/sf_localizations/assets/l10n/es.json b/packages/sf_localizations/assets/l10n/es.json index 7acfd555..b03578ba 100644 --- a/packages/sf_localizations/assets/l10n/es.json +++ b/packages/sf_localizations/assets/l10n/es.json @@ -826,6 +826,7 @@ "errorPedometer": "No se pudo actualizar el podómetro", "errorContactsMin": "El dispositivo debe tener al menos un contacto", "errorContactsMax": "Se ha alcanzado el máximo de contactos para este dispositivo", + "errorPositions": "No se pudieron cargar las posiciones", "errorSosContactsMax": "Se ha alcanzado el máximo de contactos SOS para este dispositivo", "customBackground": "Fondo de pantalla personalizado", "backgroundImageDescription": "Configura una foto como protector de pantalla exclusivo para el dispositivo", diff --git a/packages/sf_localizations/assets/l10n/fr.json b/packages/sf_localizations/assets/l10n/fr.json index ca4ff98d..edaa2d2d 100644 --- a/packages/sf_localizations/assets/l10n/fr.json +++ b/packages/sf_localizations/assets/l10n/fr.json @@ -673,6 +673,7 @@ "errorPedometer": "Impossible de mettre à jour le podomètre", "errorContactsMin": "L'appareil doit avoir au moins un contact", "errorContactsMax": "Nombre maximum de contacts atteint pour cet appareil", + "errorPositions": "Impossible de charger les positions", "errorSosContactsMax": "Nombre maximum de contacts SOS atteint pour cet appareil", "customBackground": "Image de fond personnalisée", "backgroundImageDescription": "Définissez une photo comme écran de veille personnalisé pour l'appareil", diff --git a/packages/sf_localizations/assets/l10n/it.json b/packages/sf_localizations/assets/l10n/it.json index cb410f82..e43f5cd1 100644 --- a/packages/sf_localizations/assets/l10n/it.json +++ b/packages/sf_localizations/assets/l10n/it.json @@ -673,6 +673,7 @@ "errorPedometer": "Impossibile aggiornare il contapassi", "errorContactsMin": "Il dispositivo deve avere almeno un contatto", "errorContactsMax": "Numero massimo di contatti raggiunto per questo dispositivo", + "errorPositions": "Impossibile caricare le posizioni", "errorSosContactsMax": "Numero massimo di contatti SOS raggiunto per questo dispositivo", "customBackground": "Immagine di sfondo personalizzata", "backgroundImageDescription": "Imposta una foto come screensaver personalizzato per il dispositivo", diff --git a/packages/sf_localizations/assets/l10n/pt.json b/packages/sf_localizations/assets/l10n/pt.json index 42138e51..0d3407ed 100644 --- a/packages/sf_localizations/assets/l10n/pt.json +++ b/packages/sf_localizations/assets/l10n/pt.json @@ -673,6 +673,7 @@ "errorPedometer": "Não foi possível atualizar o pedómetro", "errorContactsMin": "O dispositivo deve ter pelo menos um contacto", "errorContactsMax": "Número máximo de contactos atingido para este dispositivo", + "errorPositions": "Não foi possível carregar as posições", "errorSosContactsMax": "Número máximo de contactos SOS atingido para este dispositivo", "customBackground": "Imagem de fundo personalizada", "backgroundImageDescription": "Defina uma foto como protetor de ecrã personalizado para o dispositivo", diff --git a/packages/sf_localizations/lib/src/generated/i18n.dart b/packages/sf_localizations/lib/src/generated/i18n.dart index 63b65ab5..94896c8d 100755 --- a/packages/sf_localizations/lib/src/generated/i18n.dart +++ b/packages/sf_localizations/lib/src/generated/i18n.dart @@ -377,6 +377,7 @@ class I18n { static const String errorBirthDateRequired = 'errorBirthDateRequired'; static const String errorCall = 'errorCall'; static const String errorContactsMax = 'errorContactsMax'; + static const String errorPositions = 'errorPositions'; static const String errorSosContactsMax = 'errorSosContactsMax'; static const String errorContactsMin = 'errorContactsMin'; static const String errorDisableFunctions = 'errorDisableFunctions';