petsHero-AI/lib/app.dart
2026-03-09 11:41:49 +08:00

73 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import 'core/theme/app_theme.dart';
import 'features/gallery/gallery_screen.dart';
import 'features/generate_video/generate_progress_screen.dart';
import 'features/generate_video/generate_video_screen.dart';
import 'features/generate_video/generation_result_screen.dart';
import 'features/home/home_screen.dart';
import 'features/profile/profile_screen.dart';
import 'features/recharge/recharge_screen.dart';
import 'shared/widgets/bottom_nav_bar.dart';
/// Root app widget with navigation
class App extends StatefulWidget {
const App({super.key});
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
NavTab _currentTab = NavTab.home;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'AI Video App',
theme: AppTheme.light,
debugShowCheckedModeBanner: false,
initialRoute: '/',
routes: {
'/': (_) => _MainScaffold(
currentTab: _currentTab,
onTabSelected: (tab) => setState(() => _currentTab = tab),
),
'/recharge': (_) => const RechargeScreen(),
'/generate': (_) => const GenerateVideoScreen(),
'/progress': (_) => const GenerateProgressScreen(),
'/result': (_) => const GenerationResultScreen(),
},
);
}
}
class _MainScaffold extends StatelessWidget {
const _MainScaffold({
required this.currentTab,
required this.onTabSelected,
});
final NavTab currentTab;
final ValueChanged<NavTab> onTabSelected;
static const _screens = [
HomeScreen(),
GalleryScreen(),
ProfileScreen(),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: currentTab.index,
children: _screens,
),
bottomNavigationBar: BottomNavBar(
currentTab: currentTab,
onTabSelected: onTabSelected,
),
);
}
}