57 lines
1.9 KiB
Dart
57 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import '../../core/router/routes.dart';
|
|
import '../../core/constants/app_colors.dart';
|
|
|
|
class MainShell extends StatelessWidget {
|
|
final Widget child;
|
|
|
|
const MainShell({super.key, required this.child});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: child,
|
|
bottomNavigationBar: BottomNavigationBar(
|
|
type: BottomNavigationBarType.fixed,
|
|
selectedItemColor: AppColors.primary,
|
|
unselectedItemColor: AppColors.textMuted,
|
|
items: const [
|
|
BottomNavigationBarItem(icon: Icon(Icons.home_outlined), activeIcon: Icon(Icons.home), label: '首页'),
|
|
BottomNavigationBarItem(icon: Icon(Icons.analytics_outlined), activeIcon: Icon(Icons.analytics), label: '算力'),
|
|
BottomNavigationBarItem(icon: Icon(Icons.swap_horiz_outlined), activeIcon: Icon(Icons.swap_horiz), label: '兑换'),
|
|
BottomNavigationBarItem(icon: Icon(Icons.person_outline), activeIcon: Icon(Icons.person), label: '我的'),
|
|
],
|
|
currentIndex: _calculateSelectedIndex(context),
|
|
onTap: (index) => _onItemTapped(index, context),
|
|
),
|
|
);
|
|
}
|
|
|
|
int _calculateSelectedIndex(BuildContext context) {
|
|
final location = GoRouterState.of(context).uri.path;
|
|
if (location.startsWith(Routes.home)) return 0;
|
|
if (location.startsWith(Routes.contribution)) return 1;
|
|
if (location.startsWith(Routes.trading)) return 2;
|
|
if (location.startsWith(Routes.profile)) return 3;
|
|
return 0;
|
|
}
|
|
|
|
void _onItemTapped(int index, BuildContext context) {
|
|
switch (index) {
|
|
case 0:
|
|
context.go(Routes.home);
|
|
break;
|
|
case 1:
|
|
context.go(Routes.contribution);
|
|
break;
|
|
case 2:
|
|
context.go(Routes.trading);
|
|
break;
|
|
case 3:
|
|
context.go(Routes.profile);
|
|
break;
|
|
}
|
|
}
|
|
}
|