fix: improve BLE scanning reliability and filter out own node from contacts list improve text scaling

This commit is contained in:
zjs81
2026-01-24 00:17:18 -07:00
parent fa514533eb
commit 09e1cd2b8d
2 changed files with 42 additions and 14 deletions
+11
View File
@@ -625,6 +625,17 @@ class MeshCoreConnector extends ChangeNotifier {
_scanResults.clear(); _scanResults.clear();
_setState(MeshCoreConnectionState.scanning); _setState(MeshCoreConnectionState.scanning);
// Ensure any previous scan is fully stopped
await FlutterBluePlus.stopScan();
await _scanSubscription?.cancel();
// On iOS/macOS, add a small delay to allow BLE stack to reset
// This prevents cached results from interfering with new scans
if (defaultTargetPlatform == TargetPlatform.iOS ||
defaultTargetPlatform == TargetPlatform.macOS) {
await Future.delayed(const Duration(milliseconds: 300));
}
_scanSubscription = FlutterBluePlus.scanResults.listen((results) { _scanSubscription = FlutterBluePlus.scanResults.listen((results) {
_scanResults.clear(); _scanResults.clear();
for (var result in results) { for (var result in results) {
+18 -1
View File
@@ -313,6 +313,14 @@ class _ContactsScreenState extends State<ContactsScreen>
return matchesContactQuery(contact, _searchQuery); return matchesContactQuery(contact, _searchQuery);
}).toList(); }).toList();
// Filter out own node from the list
if (connector.selfPublicKey != null) {
final selfPubKeyHex = pubKeyToHex(connector.selfPublicKey!);
filtered = filtered.where((contact) {
return contact.publicKeyHex != selfPubKeyHex;
}).toList();
}
if (_typeFilter != ContactTypeFilter.all) { if (_typeFilter != ContactTypeFilter.all) {
filtered = filtered.where(_matchesTypeFilter).toList(); filtered = filtered.where(_matchesTypeFilter).toList();
} }
@@ -863,7 +871,15 @@ class _ContactTile extends StatelessWidget {
subtitle: Text( subtitle: Text(
'${contact.typeLabel}${contact.pathLabel} $shotPublicKey', '${contact.typeLabel}${contact.pathLabel} $shotPublicKey',
), ),
trailing: Column( // Clamp text scaling in trailing section to prevent overflow while
// maintaining accessibility. Primary content (title/subtitle) scales normally.
trailing: MediaQuery(
data: MediaQuery.of(context).copyWith(
textScaler: TextScaler.linear(
MediaQuery.textScalerOf(context).scale(1.0).clamp(1.0, 1.3),
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
@@ -879,6 +895,7 @@ class _ContactTile extends StatelessWidget {
Icon(Icons.location_on, size: 14, color: Colors.grey[400]), Icon(Icons.location_on, size: 14, color: Colors.grey[400]),
], ],
), ),
),
onTap: onTap, onTap: onTap,
onLongPress: onLongPress, onLongPress: onLongPress,
); );