142 lines
3.8 KiB
Dart
142 lines
3.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'book_screen.dart';
|
|
import 'calendar_screen.dart';
|
|
import 'settings_screen.dart';
|
|
import 'target_screen.dart';
|
|
import '../widgets/bottom_nav.dart';
|
|
//import 'login_screen.dart';
|
|
import 'camera_screen.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import '../utils/translations.dart';
|
|
import '../utils/target_colors.dart';
|
|
|
|
class HomeScreen extends StatefulWidget {
|
|
const HomeScreen({super.key});
|
|
|
|
@override
|
|
_HomeScreenState createState() => _HomeScreenState();
|
|
}
|
|
|
|
class _HomeScreenState extends State<HomeScreen> {
|
|
int _selectedIndex = 1; // Default to Shooting Screen
|
|
String _selectedLanguage = 'English';
|
|
String _selectedTarget = 'assets/target.png';
|
|
late Color _backgroundColor;
|
|
|
|
static final List<Widget> _pages = <Widget>[
|
|
BookScreen(),
|
|
TargetScreen(),
|
|
Placeholder(), // Placeholder for Scan - optional
|
|
CalendarScreen(),
|
|
SettingsScreen(),
|
|
];
|
|
|
|
final List<String> _pageTitles = [
|
|
'Book',
|
|
'Shooting',
|
|
'Scan',
|
|
'Calendar',
|
|
'Settings'
|
|
];
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
// Initialize with default target background color
|
|
_backgroundColor = TargetColors.getBackgroundColor('assets/target.png');
|
|
_loadLanguage();
|
|
_loadSelectedTarget();
|
|
}
|
|
|
|
String _t(String key) {
|
|
return AppTranslations.translate(key, _selectedLanguage);
|
|
}
|
|
|
|
Future<void> _loadLanguage() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
setState(() {
|
|
_selectedLanguage = prefs.getString('language') ?? 'English';
|
|
});
|
|
}
|
|
|
|
Future<void> _loadSelectedTarget() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final selectedTarget =
|
|
prefs.getString('selectedTarget') ?? 'assets/target.png';
|
|
setState(() {
|
|
_selectedTarget = selectedTarget;
|
|
_backgroundColor = TargetColors.getBackgroundColor(selectedTarget);
|
|
});
|
|
}
|
|
|
|
void _onItemTapped(int index) {
|
|
if (index == 2) {
|
|
_openCameraScan();
|
|
return;
|
|
}
|
|
setState(() {
|
|
_selectedIndex = index;
|
|
});
|
|
// Reload language when switching screens to pick up any changes from Settings
|
|
_loadLanguage();
|
|
}
|
|
|
|
//void _logout() {
|
|
// Navigator.of(context).pushAndRemoveUntil(
|
|
// MaterialPageRoute(builder: (context) => const LoginScreen()),
|
|
// (Route<dynamic> route) => false,
|
|
// );
|
|
//}
|
|
|
|
// When opening the camera screen, ensure the shooting screen is always selected after returning
|
|
void _openCameraScan() async {
|
|
// Navigate to CameraScreen
|
|
await Navigator.of(context).push(
|
|
MaterialPageRoute(builder: (context) => const CameraScreen()),
|
|
);
|
|
|
|
// After returning, ensure that Shooting screen (index 1) is selected
|
|
setState(() {
|
|
_selectedIndex = 1;
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text(
|
|
_t(_pageTitles[_selectedIndex]),
|
|
style: const TextStyle(color: Colors.white),
|
|
),
|
|
backgroundColor: Colors.grey[900],
|
|
iconTheme: const IconThemeData(color: Colors.white),
|
|
automaticallyImplyLeading: false,
|
|
scrolledUnderElevation: 0, // For Material 3 (Flutter 3.7+)
|
|
actions: [
|
|
Padding(
|
|
padding: const EdgeInsets.only(right: 16.0),
|
|
child: Center(
|
|
child: Text(
|
|
'V1.0.2',
|
|
style: TextStyle(
|
|
color: Colors.grey[400],
|
|
fontSize: 12,
|
|
fontWeight: FontWeight.w500,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
backgroundColor: _backgroundColor,
|
|
body: _pages[_selectedIndex],
|
|
bottomNavigationBar: BottomNavBar(
|
|
selectedIndex: _selectedIndex,
|
|
onItemTapped: _onItemTapped,
|
|
selectedLanguage: _selectedLanguage,
|
|
),
|
|
);
|
|
}
|
|
}
|