Added error catching to requestBatteryStatus

to call _handleDisconnection when it fails update.

Updated ScannerScreen to manage navigation state logic on connection.
This commit is contained in:
Winston Lowe 2026-01-28 19:55:08 -08:00
parent 8b0bdd9a46
commit 34a6b5d895
2 changed files with 34 additions and 11 deletions

View file

@ -959,7 +959,13 @@ class MeshCoreConnector extends ChangeNotifier {
if (!isConnected) return;
if (_batteryRequested && !force) return;
_batteryRequested = true;
await sendFrame(buildGetBattAndStorageFrame());
try {
await sendFrame(buildGetBattAndStorageFrame());
} catch (e) {
// Reset flag on error to allow retry
_handleDisconnection();
_batteryRequested = false;
}
}
void _startBatteryPolling() {

View file

@ -8,9 +8,35 @@ import '../widgets/device_tile.dart';
import 'contacts_screen.dart';
/// Screen for scanning and connecting to MeshCore devices
class ScannerScreen extends StatelessWidget {
class ScannerScreen extends StatefulWidget {
const ScannerScreen({super.key});
@override
State<ScannerScreen> createState() => _ScannerScreenState();
}
class _ScannerScreenState extends State<ScannerScreen> {
bool changedNavgation = false;
@override
void initState() {
super.initState();
final connector = Provider.of<MeshCoreConnector>(context, listen: false);
connector.addListener(() {
if (connector.state == MeshCoreConnectionState.disconnected) {
changedNavgation = false;
}else if (connector.state == MeshCoreConnectionState.connected && !changedNavgation) {
changedNavgation = true;
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const ContactsScreen(),
),
);
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -161,15 +187,6 @@ final l10n = context.l10n;
? result.device.platformName
: result.advertisementData.advName;
await connector.connect(result.device, displayName: name);
if (context.mounted && connector.isConnected) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const ContactsScreen(),
),
);
}
} catch (e) {
if (context.mounted) {
ScaffoldMessenger.of(context).showSnackBar(