import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../screens/dashboard/dashboard_screen.dart'; import '../screens/sensor_list/sensor_list_screen.dart'; import '../screens/graph/graph_screen.dart'; import '../screens/dtc/dtc_screen.dart'; import '../screens/datalog/datalog_list_screen.dart'; import '../screens/datalog/datalog_playback_bar.dart'; import '../../core/providers/datalog_provider.dart'; import '../screens/settings/settings_screen.dart'; import 'bt_status_chip.dart'; import 'data_status_banner.dart'; import 'record_fab.dart'; final _navIndexProvider = StateProvider((ref) => 0); class MainNav extends ConsumerWidget { const MainNav({super.key}); static const _screens = [ DashboardScreen(), SensorListScreen(), GraphScreen(), DtcScreen(), ]; static const _items = [ BottomNavigationBarItem( icon: Icon(Icons.speed), label: 'Dashboard', ), BottomNavigationBarItem( icon: Icon(Icons.list_alt), label: 'Sensors', ), BottomNavigationBarItem( icon: Icon(Icons.show_chart), label: 'Graph', ), BottomNavigationBarItem( icon: Icon(Icons.warning_amber_outlined), label: 'DTC', ), ]; @override Widget build(BuildContext context, WidgetRef ref) { final index = ref.watch(_navIndexProvider); final playback = ref.watch(playbackProvider); return Scaffold( appBar: AppBar( title: const Text('HV BT Dashboard'), actions: [ const BtStatusChip(), IconButton( icon: const Icon(Icons.folder_open_outlined), tooltip: 'Saved Sessions', onPressed: () => Navigator.push( context, MaterialPageRoute(builder: (_) => const DatalogListScreen()), ), ), // Record sits in the app bar so it never covers dashboard values. const RecordButton(), IconButton( icon: const Icon(Icons.settings_outlined), tooltip: 'Settings', onPressed: () => Navigator.push( context, MaterialPageRoute(builder: (_) => const SettingsScreen()), ), ), ], ), // SafeArea: in landscape the system navigation bar sits on a side. body: SafeArea( top: false, bottom: false, child: Column( children: [ const DataStatusBanner(), if (playback.isActive) DatalogPlaybackBar(state: playback), Expanded( child: IndexedStack( index: index, children: _screens, ), ), ], ), ), bottomNavigationBar: BottomNavigationBar( currentIndex: index, items: _items, onTap: (i) => ref.read(_navIndexProvider.notifier).state = i, ), ); } }