feat:更新TabUI模块

This commit is contained in:
2025-11-18 11:46:21 +08:00
parent 21ff0ad94f
commit df26790389
9 changed files with 88 additions and 47 deletions

View File

@@ -1,9 +1,18 @@
import 'package:flutter/material.dart';
import 'package:food_hub_app/widgets/common/index.dart';
import 'package:food_hub_app/widgets/recipe/calendar.dart';
import 'package:food_hub_app/widgets/recipe/list.dart';
import 'package:food_hub_app/widgets/recipe/timeline.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
enum RecordTab {
recipe('菜谱'),
calendar('日历'),
timeline('时间轴');
final String label;
const RecordTab(this.label);
}
class RecordPage extends StatefulWidget {
const RecordPage({super.key});
@@ -12,51 +21,46 @@ class RecordPage extends StatefulWidget {
State<StatefulWidget> createState() => _RecordPageState();
}
class _RecordPageState extends State<RecordPage>
with SingleTickerProviderStateMixin {
late final TabController _tabController = TabController(
length: 3,
vsync: this,
);
final List<TDTab> tabs = [
const TDTab(text: '菜谱', icon: Icon(Icons.book)),
const TDTab(text: '日历', icon: Icon(Icons.calendar_month)),
const TDTab(text: '时间轴', icon: Icon(Icons.timeline)),
class _RecordPageState extends State<RecordPage> {
RecordTab _currentTab = RecordTab.recipe;
final List<Widget> _tabPages = [
RecipeList(),
RecipeCalendar(),
RecipeTimeline(),
];
@override
void initState() {
super.initState();
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
Widget buildTabs({
required BuildContext context,
required RecordTab currentTab,
required ValueChanged<RecordTab> onTabChanged,
}) {
return Container(
padding: EdgeInsets.all(8),
child: buildToggleSwitch(
context: context,
currentTab: currentTab,
tabValues: RecordTab.values,
labels: RecordTab.values.map((e) => e.label).toList(),
onTabChanged: onTabChanged,
),
);
}
@override
Widget build(BuildContext context) {
return Column(
children: [
TDTabBar(
tabs: tabs,
controller: _tabController,
backgroundColor: Colors.white,
showIndicator: true,
buildTabs(
context: context,
currentTab: _currentTab,
onTabChanged: (tab) {
setState(() {
_currentTab = tab;
});
},
),
SizedBox(height: 8),
Expanded(
child: TabBarView(
controller: _tabController,
children: [
RecipeList(),
RecipeCalendar(),
RecipeTimeline(),
],
),
child: IndexedStack(index: _currentTab.index, children: _tabPages),
),
],
);