76 lines
1.9 KiB
Dart
76 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:food_hub_app/provider/food_provider.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:provider/provider.dart';
|
|
|
|
enum RecordTab {
|
|
recipe('菜谱'),
|
|
calendar('日历'),
|
|
timeline('时间轴');
|
|
|
|
final String label;
|
|
|
|
const RecordTab(this.label);
|
|
}
|
|
|
|
class RecordPage extends StatefulWidget {
|
|
const RecordPage({super.key});
|
|
|
|
@override
|
|
State<StatefulWidget> createState() => _RecordPageState();
|
|
}
|
|
|
|
class _RecordPageState extends State<RecordPage> {
|
|
final List<Widget> _tabPages = [
|
|
RecipeList(),
|
|
RecipeCalendar(),
|
|
RecipeTimeline(),
|
|
];
|
|
|
|
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,
|
|
),
|
|
);
|
|
}
|
|
|
|
void _onTabChange(RecordTab tab, FoodProvider provider) {
|
|
provider.currentRecordTab = tab;
|
|
provider.onRecordTabChange();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final provider = context.watch<FoodProvider>();
|
|
|
|
return Column(
|
|
children: [
|
|
_buildTabs(
|
|
context: context,
|
|
currentTab: provider.currentRecordTab,
|
|
onTabChanged: (tab) => _onTabChange(tab, provider),
|
|
),
|
|
Expanded(
|
|
child: IndexedStack(
|
|
index: provider.currentRecordTab.index,
|
|
children: _tabPages,
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|