fix(location): guard frequency timer minimum and filter zero options
Prevent position polling timer from firing with frequency < 60s (protects against 0s values that saturate the API). Also filter out 0 from location capability options in the frequency selector.
This commit is contained in:
@@ -87,9 +87,12 @@ class _LocationMapState extends ConsumerState<LocationMap>
|
|||||||
_startMonitoring();
|
_startMonitoring();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const _minFrequency = 60;
|
||||||
|
|
||||||
void _startMonitoring() {
|
void _startMonitoring() {
|
||||||
_followTimer?.cancel();
|
_followTimer?.cancel();
|
||||||
final frequency = widget.selectedDevice?.settings.frequency ?? 60;
|
final raw = widget.selectedDevice?.settings.frequency ?? 60;
|
||||||
|
final frequency = raw < _minFrequency ? _minFrequency : raw;
|
||||||
_followTimer = Timer.periodic(Duration(seconds: frequency), (_) {
|
_followTimer = Timer.periodic(Duration(seconds: frequency), (_) {
|
||||||
if (ref.read(selectedDeviceProvider).value?.isDisconnected ?? true) return;
|
if (ref.read(selectedDeviceProvider).value?.isDisconnected ?? true) return;
|
||||||
widget.onRefreshPosition();
|
widget.onRefreshPosition();
|
||||||
@@ -244,7 +247,8 @@ class _LocationMapState extends ConsumerState<LocationMap>
|
|||||||
if (!mounted) return;
|
if (!mounted) return;
|
||||||
if (success) {
|
if (success) {
|
||||||
_followTimer?.cancel();
|
_followTimer?.cancel();
|
||||||
_followTimer = Timer.periodic(Duration(seconds: frequency), (_) {
|
final safeFrequency = frequency < _minFrequency ? _minFrequency : frequency;
|
||||||
|
_followTimer = Timer.periodic(Duration(seconds: safeFrequency), (_) {
|
||||||
widget.onRefreshPosition();
|
widget.onRefreshPosition();
|
||||||
});
|
});
|
||||||
showTopSnackbar(
|
showTopSnackbar(
|
||||||
@@ -642,7 +646,9 @@ class _LocationMapState extends ConsumerState<LocationMap>
|
|||||||
FrequencySelector(
|
FrequencySelector(
|
||||||
currentFrequency:
|
currentFrequency:
|
||||||
ref.watch(selectedDeviceProvider).value?.settings.frequency ?? 60,
|
ref.watch(selectedDeviceProvider).value?.settings.frequency ?? 60,
|
||||||
options: widget.selectedDevice!.capabilities!.location!.options,
|
options: widget.selectedDevice!.capabilities!.location!.options
|
||||||
|
.where((o) => o > 0)
|
||||||
|
.toList(),
|
||||||
onChanged: _updateFrequency,
|
onChanged: _updateFrequency,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user