feat: AI Agent 处理器扩展 + 服药打卡确认链路 + AI 气泡配色微调 + 数据刷新 providers 抽离 + 多端页面细节调整
This commit is contained in:
@@ -9,6 +9,7 @@ import '../core/app_theme.dart';
|
||||
import '../core/navigation_provider.dart';
|
||||
import '../providers/auth_provider.dart';
|
||||
import '../providers/data_providers.dart';
|
||||
import '../providers/data_refresh_providers.dart';
|
||||
import '../widgets/common_widgets.dart';
|
||||
import '../widgets/app_empty_state.dart';
|
||||
import '../widgets/app_error_state.dart';
|
||||
@@ -64,7 +65,7 @@ class _DietRecordListPageState extends ConsumerState<DietRecordListPage> {
|
||||
setState(() => _data.removeAt(index));
|
||||
try {
|
||||
await ref.read(dietServiceProvider).deleteRecord(id);
|
||||
ref.invalidate(dietRecordsProvider);
|
||||
ref.read(dietDataRefreshSignalProvider.notifier).trigger();
|
||||
if (mounted) {
|
||||
AppToast.show(context, '已删除', type: AppToastType.success);
|
||||
}
|
||||
@@ -100,6 +101,9 @@ class _DietRecordListPageState extends ConsumerState<DietRecordListPage> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
ref.listen(dietDataRefreshSignalProvider, (previous, next) {
|
||||
if (previous != null && previous != next) _refresh();
|
||||
});
|
||||
if (_loading) {
|
||||
return GradientScaffold(
|
||||
appBar: AppBar(
|
||||
@@ -451,7 +455,9 @@ class _DietRecordListPageState extends ConsumerState<DietRecordListPage> {
|
||||
});
|
||||
if (!ctx.mounted) return;
|
||||
Navigator.pop(ctx);
|
||||
await _refresh();
|
||||
ref
|
||||
.read(dietDataRefreshSignalProvider.notifier)
|
||||
.trigger();
|
||||
} catch (_) {
|
||||
if (!ctx.mounted) return;
|
||||
setDialogState(() => saving = false);
|
||||
@@ -1047,7 +1053,7 @@ class _ExercisePlanPageState extends ConsumerState<ExercisePlanPage> {
|
||||
setState(() => _busyItems.add(itemId));
|
||||
try {
|
||||
await ref.read(exerciseServiceProvider).checkIn(itemId);
|
||||
ref.invalidate(currentExercisePlanProvider);
|
||||
ref.read(exerciseDataRefreshSignalProvider.notifier).trigger();
|
||||
_load();
|
||||
} catch (e) {
|
||||
debugPrint('[ExercisePlan] 打卡失败: $e');
|
||||
@@ -1061,7 +1067,7 @@ class _ExercisePlanPageState extends ConsumerState<ExercisePlanPage> {
|
||||
|
||||
Future<void> _deletePlan(String id) async {
|
||||
await ref.read(exerciseServiceProvider).deletePlan(id);
|
||||
ref.invalidate(currentExercisePlanProvider);
|
||||
ref.read(exerciseDataRefreshSignalProvider.notifier).trigger();
|
||||
_load();
|
||||
}
|
||||
|
||||
@@ -1657,7 +1663,7 @@ class _ExercisePlanDetailPageState
|
||||
setState(() => _busyItems.add(itemId));
|
||||
try {
|
||||
await ref.read(exerciseServiceProvider).checkIn(itemId);
|
||||
ref.invalidate(currentExercisePlanProvider);
|
||||
ref.read(exerciseDataRefreshSignalProvider.notifier).trigger();
|
||||
_load();
|
||||
} catch (e) {
|
||||
debugPrint('[ExercisePlanDetail] 打卡失败: $e');
|
||||
@@ -2182,7 +2188,7 @@ class _ExercisePlanCreatePageState
|
||||
'reminderTime':
|
||||
'${_reminderTime.hour.toString().padLeft(2, '0')}:${_reminderTime.minute.toString().padLeft(2, '0')}',
|
||||
});
|
||||
ref.invalidate(currentExercisePlanProvider);
|
||||
ref.read(exerciseDataRefreshSignalProvider.notifier).trigger();
|
||||
if (mounted) {
|
||||
popRoute(ref);
|
||||
}
|
||||
@@ -3805,8 +3811,19 @@ class _HealthCalendarPageState extends ConsumerState<HealthCalendarPage> {
|
||||
_loadMonth();
|
||||
}
|
||||
|
||||
void _refreshScheduleData() {
|
||||
_dayCache.clear();
|
||||
_loadMonth();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
ref.listen(exerciseDataRefreshSignalProvider, (previous, next) {
|
||||
if (previous != null && previous != next) _refreshScheduleData();
|
||||
});
|
||||
ref.listen(medicationDataRefreshSignalProvider, (previous, next) {
|
||||
if (previous != null && previous != next) _refreshScheduleData();
|
||||
});
|
||||
return GradientScaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Colors.white,
|
||||
|
||||
Reference in New Issue
Block a user