Files
derma_flutter/lib/layout/layout_page.dart
2025-08-29 13:36:26 +08:00

77 lines
1.9 KiB
Dart

import 'package:derma_flutter/page/my/my_page.dart';
import 'package:derma_flutter/page/record/list/record_list_page.dart';
import 'package:flutter/material.dart';
import 'package:remixicon/remixicon.dart';
import '../page/education/list/education_list_page.dart';
import '../page/home/home_page.dart';
import 'tabbar.dart';
class LayoutPage extends StatefulWidget {
const LayoutPage({super.key});
@override
State<LayoutPage> createState() => _LayoutPageState();
}
class _LayoutPageState extends State<LayoutPage> {
///分页
final PageController _pageController = PageController(initialPage: 0);
int get currentPage {
if (!_pageController.hasClients) return 1; // 没 attach 直接 0
return _pageController.page?.round() ?? 1;
}
//TabBar列表
final List<PageItem> _pages = [
PageItem(
name: "Home",
icon: RemixIcons.home_2_line,
page: HomePage(),
),
PageItem(
name: "Record",
icon: RemixIcons.history_line,
page: RecordListPage(),
),
PageItem(
name: "Book",
icon: RemixIcons.book_open_line,
page: EducationListPage(),
),
PageItem(
name: "My",
icon: RemixIcons.user_line,
page: MyPage(),
),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView(
controller: _pageController,
physics: const NeverScrollableScrollPhysics(),
children: _pages.map((item) => item.page).toList(),
),
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
currentIndex: currentPage,
onTap: (index) {
_pageController.jumpToPage(index);
setState(() {});
},
items: _pages.map((item) {
return BottomNavigationBarItem(
icon: Icon(item.icon),
label: item.name,
);
}).toList(),
showSelectedLabels: false,
showUnselectedLabels: false,
),
);
}
}