feat:更新菜谱显示模块
This commit is contained in:
@@ -14,79 +14,6 @@ class _HomePage extends State<HomePage> {
|
||||
|
||||
List<Widget> get tabPages => pageInfos.map((item) => item.page).toList();
|
||||
|
||||
// 显示底部弹窗
|
||||
void _showBottomSheet() {
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.vertical(top: Radius.circular(16)),
|
||||
),
|
||||
builder:
|
||||
(context) => Container(
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Text(
|
||||
'请选择操作',
|
||||
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
ListTile(
|
||||
leading: Icon(
|
||||
Icons.book,
|
||||
color: Theme.of(context).primaryColor,
|
||||
),
|
||||
title: const Text('新增菜谱'),
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
_handleAddRecipe();
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: Icon(
|
||||
Icons.note_add,
|
||||
color: Theme.of(context).primaryColor,
|
||||
),
|
||||
title: const Text('新增记录'),
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
Navigator.pushNamed(context, "/recordForm");
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: Icon(
|
||||
Icons.group,
|
||||
color: Theme.of(context).primaryColor,
|
||||
),
|
||||
title: const Text('发布朋友圈'),
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
_handleAddRecord();
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// 处理添加菜谱
|
||||
void _handleAddRecipe() {
|
||||
// 这里添加跳转或处理添加菜谱的逻辑
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('添加菜谱功能')));
|
||||
}
|
||||
|
||||
// 处理添加记录
|
||||
void _handleAddRecord() {
|
||||
// 这里添加跳转或处理添加记录的逻辑
|
||||
ScaffoldMessenger.of(
|
||||
context,
|
||||
).showSnackBar(const SnackBar(content: Text('添加记录功能')));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@@ -103,23 +30,27 @@ class _HomePage extends State<HomePage> {
|
||||
);
|
||||
},
|
||||
),
|
||||
actions: homeActions(context),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.search, color: Colors.white),
|
||||
onPressed: () {
|
||||
// 搜索功能
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
backgroundColor: Color(0xFFF5F5F5),
|
||||
drawer: SettingsDrawer(),
|
||||
body: Padding(
|
||||
padding: EdgeInsets.all(4),
|
||||
child: tabPages[_currentIndex],
|
||||
),
|
||||
body: Padding(padding: EdgeInsets.all(4), child: tabPages[_currentIndex]),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
backgroundColor: Theme.of(context).primaryColor,
|
||||
onPressed: _showBottomSheet,
|
||||
backgroundColor: Theme.of(context).colorScheme.primary,
|
||||
onPressed: () => buildBottomSheet(context),
|
||||
shape: const CircleBorder(),
|
||||
mini: true,
|
||||
child: const Icon(Icons.add, color: Colors.white, size: 30),
|
||||
),
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
|
||||
bottomNavigationBar: NavBar(
|
||||
bottomNavigationBar: buildBottomNavBar(
|
||||
currentIndex: _currentIndex,
|
||||
onTap: (index) {
|
||||
setState(() {
|
||||
|
||||
@@ -43,8 +43,7 @@ class _RecipeDetailState extends State<RecipeDetailPage> {
|
||||
Future<void> refreshRecipeDetail() async {
|
||||
// 获取参数
|
||||
final args = ModalRoute.of(context)?.settings.arguments as Map;
|
||||
final recipeId = args['id'];
|
||||
final result = await queryRecipeByIdApi(recipeId);
|
||||
final result = await queryRecipeByIdApi(args['id']);
|
||||
|
||||
setState(() {
|
||||
recipe = result;
|
||||
@@ -71,13 +70,8 @@ class _RecipeDetailState extends State<RecipeDetailPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('菜谱信息'),
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.arrow_back),
|
||||
onPressed: () => Navigator.pop(context),
|
||||
),
|
||||
),
|
||||
appBar: AppBar(title: Text('菜谱信息')),
|
||||
backgroundColor: Color(0xFFF4F4F4),
|
||||
body: SingleChildScrollView(
|
||||
child: Padding(padding: EdgeInsets.all(5), child: _buildRecipeDetail()),
|
||||
),
|
||||
@@ -89,12 +83,11 @@ class _RecipeDetailState extends State<RecipeDetailPage> {
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
_buildTitleSection(),
|
||||
SizedBox(height: 10),
|
||||
_buildInfoCard(
|
||||
context,
|
||||
icon: Icons.info,
|
||||
title: "基础信息",
|
||||
content: _buildTag(context, title: recipe.category),
|
||||
content: buildTag(context, recipe.category),
|
||||
),
|
||||
_buildInfoCard(
|
||||
context,
|
||||
@@ -131,20 +124,6 @@ class _RecipeDetailState extends State<RecipeDetailPage> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildTag(BuildContext context, {required String title}) {
|
||||
return Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 4),
|
||||
decoration: BoxDecoration(
|
||||
color: Color.lerp(Theme.of(context).primaryColor, Colors.white, 0.8),
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
child: Text(
|
||||
title,
|
||||
style: TextStyle(color: Theme.of(context).primaryColor),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildTitleSection() {
|
||||
return Text(
|
||||
recipe.name,
|
||||
@@ -165,16 +144,14 @@ class _RecipeDetailState extends State<RecipeDetailPage> {
|
||||
child: Text(title, style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
),
|
||||
if (materials.isEmpty)
|
||||
_buildTag(context, title: '无')
|
||||
buildTag(context, '无')
|
||||
else
|
||||
Wrap(
|
||||
spacing: 8.0,
|
||||
runSpacing: 8.0,
|
||||
children:
|
||||
materials
|
||||
.map(
|
||||
(m) => _buildTag(context, title: '${m.name} ${m.amount}'),
|
||||
)
|
||||
.map((m) => buildTag(context, '${m.name} ${m.amount}'))
|
||||
.toList(),
|
||||
),
|
||||
],
|
||||
@@ -229,7 +206,7 @@ class _RecipeDetailState extends State<RecipeDetailPage> {
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Icon(icon, color: Theme.of(context).primaryColor),
|
||||
Icon(icon, color: Theme.of(context).colorScheme.primary),
|
||||
const SizedBox(width: 5),
|
||||
Text(
|
||||
title,
|
||||
@@ -240,7 +217,7 @@ class _RecipeDetailState extends State<RecipeDetailPage> {
|
||||
SizedBox(height: 5),
|
||||
content,
|
||||
],
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user