mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
feat: Refactor add channel button implementation and update visibility logic
This commit is contained in:
@@ -127,27 +127,6 @@ class _ContactsTabState extends State<ContactsTab> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Build the FAB for adding channels
|
|
||||||
Widget? _buildAddChannelFAB(BuildContext context) {
|
|
||||||
final appProvider = context.watch<AppProvider>();
|
|
||||||
final connectionProvider = context.watch<ConnectionProvider>();
|
|
||||||
final l10n = AppLocalizations.of(context)!;
|
|
||||||
|
|
||||||
// Only show when:
|
|
||||||
// - NOT in simple mode
|
|
||||||
// - Device is connected
|
|
||||||
if (appProvider.isSimpleMode ||
|
|
||||||
!connectionProvider.deviceInfo.isConnected) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FloatingActionButton.extended(
|
|
||||||
onPressed: () => _showAddChannelDialog(context),
|
|
||||||
icon: const Icon(Icons.add_circle_outline),
|
|
||||||
label: Text(l10n.addChannel),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final l10n = AppLocalizations.of(context)!;
|
final l10n = AppLocalizations.of(context)!;
|
||||||
@@ -256,28 +235,48 @@ class _ContactsTabState extends State<ContactsTab> {
|
|||||||
],
|
],
|
||||||
|
|
||||||
// Channels (hidden in simple mode)
|
// Channels (hidden in simple mode)
|
||||||
if (!isSimpleMode && channels.isNotEmpty) ...[
|
if (!isSimpleMode) ...[
|
||||||
_SectionHeader(
|
_SectionHeader(
|
||||||
title: l10n.channels,
|
title: l10n.channels,
|
||||||
count: channels.length,
|
count: channels.length,
|
||||||
icon: Icons.broadcast_on_personal,
|
icon: Icons.broadcast_on_personal,
|
||||||
),
|
),
|
||||||
...channels.map(
|
if (channels.isNotEmpty) ...[
|
||||||
(contact) => ContactTile(
|
...channels.map(
|
||||||
contact: contact,
|
(contact) => ContactTile(
|
||||||
currentPosition: _currentPosition,
|
contact: contact,
|
||||||
calculateDistance: _calculateDistanceInMeters,
|
currentPosition: _currentPosition,
|
||||||
formatDistance: _formatDistance,
|
calculateDistance: _calculateDistanceInMeters,
|
||||||
onNavigateToMap: widget.onNavigateToMap,
|
formatDistance: _formatDistance,
|
||||||
|
onNavigateToMap: widget.onNavigateToMap,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
// Add Channel Button (only show when connected)
|
||||||
|
if (context.watch<ConnectionProvider>().deviceInfo.isConnected)
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16,
|
||||||
|
vertical: 8,
|
||||||
|
),
|
||||||
|
child: OutlinedButton.icon(
|
||||||
|
onPressed: () => _showAddChannelDialog(context),
|
||||||
|
icon: const Icon(Icons.add_circle_outline),
|
||||||
|
label: Text(l10n.addChannel),
|
||||||
|
style: OutlinedButton.styleFrom(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 24,
|
||||||
|
vertical: 12,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
floatingActionButton: _buildAddChannelFAB(context),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user