From 8b2046c107570b31ac5b5912379581f7855e6af8 Mon Sep 17 00:00:00 2001 From: Halit Aksoy Date: Sat, 22 Feb 2025 20:45:01 +0300 Subject: [PATCH] fix(frontend): error handling --- mercury_frontend/lib/main.dart | 6 ++-- mercury_frontend/lib/sensor_provider.dart | 34 +++++++++++++++++++---- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/mercury_frontend/lib/main.dart b/mercury_frontend/lib/main.dart index ef0956d..d864445 100644 --- a/mercury_frontend/lib/main.dart +++ b/mercury_frontend/lib/main.dart @@ -37,7 +37,7 @@ class _SensorScreenState extends State { void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { - Provider.of(context, listen: false).fetchData(); + Provider.of(context, listen: false).startAutoFetch(const Duration(seconds: 1)); }); } @@ -49,8 +49,8 @@ class _SensorScreenState extends State { child: Consumer( builder: (context, sensorProvider, child) { if (sensorProvider.sensorData == null) { - if (sensorProvider.error != null) { - return Text('Error: ${sensorProvider.error}'); + if (sensorProvider.exception != null) { + return Text('Error: ${sensorProvider.exception}'); } return const CircularProgressIndicator(); } else { diff --git a/mercury_frontend/lib/sensor_provider.dart b/mercury_frontend/lib/sensor_provider.dart index fc536c1..faea423 100644 --- a/mercury_frontend/lib/sensor_provider.dart +++ b/mercury_frontend/lib/sensor_provider.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'sensor_data.dart'; import 'sensor_service.dart'; @@ -6,18 +8,40 @@ class SensorProvider with ChangeNotifier { final SensorService _service = SensorService(); SensorData? _sensorData; - Error? _error; + Exception? _exception; SensorData? get sensorData => _sensorData; - Error? get error => _error; + Exception? get exception => _exception; + + Timer? _timer; Future fetchData() async { try { _sensorData = await _service.fetchSensorData(); - } catch (e) { - _error = e as Error; + } on Exception catch (e) { + _exception = e; + _sensorData = null; } notifyListeners(); } -} + + void startAutoFetch(Duration interval) { + _timer = Timer.periodic(interval, (timer) async { + await fetchData(); + }); + } + + // Stop auto-fetching + void stopAutoFetch() { + _timer?.cancel(); + _timer = null; + } + + // Dispose the timer when the provider is disposed + @override + void dispose() { + _timer?.cancel(); + super.dispose(); + } +} \ No newline at end of file