fix: 用药模块重做 + 运动计划不限7天 + 打卡可切换 + 删除修复
- 用药: 重写列表页(标签筛选+详情弹窗+打卡切换+滑动删除) - 用药: 重写编辑页(选择器替代输入+同列布局+频率改为每天几次) - 用药: 加Notes字段+DELETE端点+修复重复端点 - 运动: 不限7天, startDate+索引推算当天 - 打卡: 药/运动打卡可切换(点✓取消) - 删除: 修复滑动删除热区, 一次点击即删除 - 侧边栏: 一键清理历史对话 - 饮食/运动/用药/问诊 API路径加/api/前缀 - 通知时机修正: 新建计划不再提前弹窗
This commit is contained in:
@@ -187,8 +187,14 @@ class HealthDrawer extends ConsumerWidget {
|
||||
),
|
||||
const Spacer(),
|
||||
GestureDetector(
|
||||
onTap: () => ref.invalidate(conversationListProvider),
|
||||
child: const Padding(padding: EdgeInsets.all(4), child: Icon(Icons.refresh, size: 15, color: Color(0xFFAAAAAA))),
|
||||
onTap: () async {
|
||||
final api = ref.read(apiClientProvider);
|
||||
for (final c in conversations.value ?? []) {
|
||||
try { await api.delete('/api/ai/conversations/${c.id}'); } catch (_) {}
|
||||
}
|
||||
ref.invalidate(conversationListProvider);
|
||||
},
|
||||
child: const Padding(padding: EdgeInsets.all(4), child: Text('清理', style: TextStyle(fontSize: 11, color: Color(0xFFAAAAAA)))),
|
||||
),
|
||||
]),
|
||||
),
|
||||
@@ -268,7 +274,13 @@ class HealthDrawer extends ConsumerWidget {
|
||||
item: item,
|
||||
onTap: () {
|
||||
ref.read(chatProvider.notifier).loadConversation(item.id);
|
||||
Navigator.of(context).pop(); // 关闭抽屉
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
onDelete: () async {
|
||||
try {
|
||||
await ref.read(apiClientProvider).delete('/api/ai/conversations/${item.id}');
|
||||
ref.invalidate(conversationListProvider);
|
||||
} catch (_) {}
|
||||
},
|
||||
)).toList(),
|
||||
),
|
||||
@@ -424,8 +436,9 @@ class _FeatureChip extends StatelessWidget {
|
||||
class _ConversationItem extends StatelessWidget {
|
||||
final ConversationItem item;
|
||||
final VoidCallback? onTap;
|
||||
final VoidCallback? onDelete;
|
||||
|
||||
const _ConversationItem({required this.item, this.onTap});
|
||||
const _ConversationItem({required this.item, this.onTap, this.onDelete});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -449,14 +462,12 @@ class _ConversationItem extends StatelessWidget {
|
||||
),
|
||||
title: Text(item.title, maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: Color(0xFF333333))),
|
||||
subtitle: Text(item.lastMessage, maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 11, color: Colors.grey[500])),
|
||||
trailing: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(_formatTime(item.updatedAt), style: TextStyle(fontSize: 9, color: Colors.grey[400])),
|
||||
const SizedBox(height: 2),
|
||||
Icon(Icons.chevron_right, size: 12, color: Colors.grey[300]),
|
||||
],
|
||||
trailing: GestureDetector(
|
||||
onTap: onDelete,
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Icon(Icons.close, size: 16, color: Color(0xFFBBBBBB)),
|
||||
),
|
||||
),
|
||||
dense: true,
|
||||
visualDensity: VisualDensity.compact,
|
||||
|
||||
Reference in New Issue
Block a user