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,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:toggle_switch/toggle_switch.dart';
Widget formLabelText({required String labelText, bool isRequired = false}) {
return Text.rich(
@@ -50,16 +51,46 @@ Widget buildEmptyData() {
);
}
Widget buildToggleSwitch<T extends Enum>({
required BuildContext context,
required T currentTab,
required List<T> tabValues,
required List<String> labels,
required ValueChanged<T> onTabChanged,
}) {
return ToggleSwitch(
minWidth: 90.0,
minHeight: 40.0,
initialLabelIndex: tabValues.indexOf(currentTab),
totalSwitches: tabValues.length,
labels: labels,
activeBgColor: [Theme.of(context).colorScheme.primary],
activeFgColor: Colors.white,
inactiveBgColor: Colors.grey.shade200,
inactiveFgColor: Colors.grey.shade700,
cornerRadius: 12.0,
customTextStyles: [TextStyle(fontSize: 12, fontWeight: FontWeight.w500)],
onToggle: (index) {
if (index != null && index < tabValues.length) {
onTabChanged(tabValues[index]);
}
},
);
}
/// 圆形图标按钮
Widget circleIconButton({
required IconData icon,
required VoidCallback onPressed,
required BuildContext context,
bool? isSmall
}) {
final double size = isSmall == true ? 24 : 36;
return ElevatedButton(
onPressed: onPressed,
style: ElevatedButton.styleFrom(
fixedSize: Size(26, 26),
fixedSize: Size(size, size),
shape: CircleBorder(),
elevation: 0,
backgroundColor: Theme.of(context).colorScheme.primary,

View File

@@ -91,6 +91,7 @@ class _YearSelectorState extends State<YearSelector>
circleIconButton(
context: context,
icon: Icons.chevron_left,
isSmall: true,
onPressed: () => _previousYear(),
),
SizedBox(width: 5),
@@ -113,6 +114,7 @@ class _YearSelectorState extends State<YearSelector>
circleIconButton(
context: context,
icon: Icons.chevron_right,
isSmall: true,
onPressed: () => _nextYear(),
)
],

View File

@@ -114,13 +114,13 @@ class _RecipeCalendarState extends State<RecipeCalendar> {
return Card(
elevation: 0,
color: colors.inversePrimary,
color: colors.onSecondary,
child: Padding(
padding: EdgeInsets.all(10),
child: Row(
children: [
CircleAvatar(
radius: 24,
radius: 20,
backgroundColor: colors.primary,
child: Text(
record.category[0],

View File

@@ -39,7 +39,7 @@ class RecipeCard extends StatelessWidget {
icon: Icons.edit,
onPressed: () => {},
),
SizedBox(width: 8),
SizedBox(width: 4),
circleIconButton(
context: context,
icon: Icons.book,
@@ -54,7 +54,6 @@ class RecipeCard extends StatelessWidget {
),
],
),
const SizedBox(height: 5),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,

View File

@@ -33,14 +33,11 @@ class _RecipeListState extends State<RecipeList> {
if (recipeSummaryList.isEmpty) {
return buildEmptyData();
} else {
return ListView.separated(
return ListView.builder(
itemCount: recipeSummaryList.length,
itemBuilder: (context, index) {
return RecipeCard(recipe: recipeSummaryList[index]);
},
separatorBuilder: (context, index) {
return SizedBox(height: 10);
},
}
);
}
}

View File

@@ -5,7 +5,6 @@ import 'package:food_hub_app/models/recipe.dart';
import 'package:food_hub_app/widgets/common/image.dart';
import 'package:food_hub_app/widgets/common/index.dart';
import 'package:food_hub_app/widgets/common/year_selector.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
import 'package:timelines_plus/timelines_plus.dart';
class RecipeTimeline extends StatefulWidget {