feat: Refactor add channel button implementation and update visibility logic

This commit is contained in:
Janez T
2025-10-28 10:19:28 +01:00
parent e6289199ba
commit cf8a498864

View File

@@ -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),
); );
} }
} }