安装 tdesign_flutter
flutter pub add tdesign_flutter
创建页面组件
// lib/features/main_navigation/app_main_navigation.dart
import 'package:flutter/material.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
class AppMainNavigation extends StatefulWidget {
const AppMainNavigation({super.key});
@override
State<AppMainNavigation> createState() => _AppMainNavigationState();
}
class _AppMainNavigationState extends State<AppMainNavigation> {
int _currentIndex = 0;
final PageController _pageController = PageController();
late final List<TDBottomTabBarTabConfig> _navItems;
@override
void initState() {
// TODO: implement initState
super.initState();
_navItems = [
_buildHomeTab(),
_buildAppsTab(),
_buildProfileTab(),
];
}
TDBottomTabBarTabConfig _buildHomeTab() => TDBottomTabBarTabConfig(
selectedIcon: const Icon(TDIcons.home_filled, size: 24),
unselectedIcon: const Icon(TDIcons.home, size: 24),
tabText: '首页',
badgeConfig: BadgeConfig(
showBadge: true,
tdBadge: const TDBadge(
TDBadgeType.message,
count: '3',
),
badgeTopOffset: -4,
badgeRightOffset: -12,
),
onTap: () => _handleNavTap(0),
);
TDBottomTabBarTabConfig _buildAppsTab() => TDBottomTabBarTabConfig(
selectedIcon: const Icon(TDIcons.app_filled, size: 24),
unselectedIcon: const Icon(TDIcons.app, size: 24),
tabText: '应用',
onTap: () => _handleNavTap(1),
);
TDBottomTabBarTabConfig _buildProfileTab() => TDBottomTabBarTabConfig(
selectedIcon: const Icon(TDIcons.user_filled, size: 24),
unselectedIcon: const Icon(TDIcons.user, size: 24),
tabText: '我的',
badgeConfig: BadgeConfig(
showBadge: true,
tdBadge: const TDBadge(TDBadgeType.redPoint),
),
onTap: () => _handleNavTap(2),
);
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView(
controller: _pageController,
physics: const NeverScrollableScrollPhysics(),
children: _buildPages(),
),
bottomNavigationBar: _buildNavigationBar(),
);
}
Widget _buildNavigationBar() {
return TDBottomTabBar(
TDBottomTabBarBasicType.iconText,
navigationTabs: _navItems,
currentIndex: _currentIndex,
componentType: TDBottomTabBarComponentType.label,
outlineType: TDBottomTabBarOutlineType.filled,
showTopBorder: true,
useSafeArea: true,
backgroundColor: Colors.white,
// selectedBgColor: TDTheme.of(context).brandColor1.withOpacity(0.1),
);
}
void _handleNavTap(int index) {
if (_currentIndex == index) return;
setState(() => _currentIndex = index);
_pageController.jumpToPage(index);
}
List<Widget> _buildPages() => const [
_HomePage(),
_AppsPage(),
_ProfilePage(),
];
}
// 页面组件
class _HomePage extends StatelessWidget {
const _HomePage();
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(child: Text('首页内容区')),
);
}
}
class _AppsPage extends StatelessWidget {
const _AppsPage();
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(child: Text('应用中心')),
);
}
}
class _ProfilePage extends StatelessWidget {
const _ProfilePage();
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(child: Text('个人中心')),
);
}
}
效果图
