fix: address PR review issues

- Fix memory leak by adding dispose() to remove connection listener
- Fix typo: changedNavgation -> _changedNavigation
- Add mounted check before navigation to prevent errors
- Remove overly aggressive _handleDisconnection() call on battery request failure
- Only reset battery flag on error to allow retry without disconnecting
This commit is contained in:
Zach 2026-01-28 21:28:28 -07:00
parent 34a6b5d895
commit 92d2b224e7
2 changed files with 24 additions and 12 deletions

View file

@ -963,7 +963,7 @@ class MeshCoreConnector extends ChangeNotifier {
await sendFrame(buildGetBattAndStorageFrame());
} catch (e) {
// Reset flag on error to allow retry
_handleDisconnection();
// Don't disconnect on battery request failure - it may be transient
_batteryRequested = false;
}
}

View file

@ -16,25 +16,37 @@ class ScannerScreen extends StatefulWidget {
}
class _ScannerScreenState extends State<ScannerScreen> {
bool changedNavgation = false;
bool _changedNavigation = false;
late final VoidCallback _connectionListener;
@override
void initState() {
super.initState();
final connector = Provider.of<MeshCoreConnector>(context, listen: false);
connector.addListener(() {
_connectionListener = () {
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(),
),
);
_changedNavigation = false;
} else if (connector.state == MeshCoreConnectionState.connected && !_changedNavigation) {
_changedNavigation = true;
if (mounted) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const ContactsScreen(),
),
);
}
}
});
};
connector.addListener(_connectionListener);
}
@override
void dispose() {
final connector = Provider.of<MeshCoreConnector>(context, listen: false);
connector.removeListener(_connectionListener);
super.dispose();
}
@override