feat: AI Agent 处理器扩展 + 服药打卡确认链路 + AI 气泡配色微调 + 数据刷新 providers 抽离 + 多端页面细节调整

This commit is contained in:
MingNian
2026-07-20 17:12:00 +08:00
parent 9cea41705e
commit 0cb5b8e85a
45 changed files with 1435 additions and 276 deletions

View File

@@ -3,11 +3,13 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../core/app_colors.dart';
import '../../core/navigation_provider.dart';
import '../../providers/auth_provider.dart';
import '../../providers/backoffice_refresh_providers.dart';
import '../../widgets/backoffice_ui.dart';
import '../doctor/doctor_home_page.dart' show doctorPageProvider;
final _dashboardProvider = FutureProvider<Map<String, dynamic>?>((ref) async {
ref.watch(userSessionIdentityProvider);
ref.watch(doctorDashboardRefreshSignalProvider);
final api = ref.read(apiClientProvider);
final res = await api.get('/api/doctor/dashboard');
return res.data['data'] as Map<String, dynamic>?;

View File

@@ -274,6 +274,7 @@ class _DoctorFollowUpEditPageState
}
if (mounted) {
ref.read(doctorFollowupsRefreshSignalProvider.notifier).trigger();
ref.read(doctorDashboardRefreshSignalProvider.notifier).trigger();
_snack(isEdit ? '修改成功' : '创建成功', ok: true);
popRoute(ref);
}

View File

@@ -211,6 +211,12 @@ class _DoctorFollowupsPageState extends ConsumerState<DoctorFollowupsPage> {
.markDone(
f['id']?.toString() ?? '',
);
ref
.read(
doctorDashboardRefreshSignalProvider
.notifier,
)
.trigger();
},
child: const Text(
'完成',
@@ -232,6 +238,12 @@ class _DoctorFollowupsPageState extends ConsumerState<DoctorFollowupsPage> {
.remove(
f['id']?.toString() ?? '',
);
ref
.read(
doctorDashboardRefreshSignalProvider
.notifier,
)
.trigger();
},
child: const Text(
'删除',

View File

@@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../core/app_colors.dart';
import '../../core/navigation_provider.dart';
import '../../providers/auth_provider.dart';
import '../../providers/backoffice_refresh_providers.dart';
import '../../widgets/app_toast.dart';
import '../../widgets/backoffice_ui.dart';
@@ -120,6 +121,7 @@ class _DoctorProfileEditPageState extends ConsumerState<DoctorProfileEditPage> {
},
);
ref.invalidate(_docProfileProvider);
ref.read(doctorDashboardRefreshSignalProvider.notifier).trigger();
if (mounted) {
AppToast.show(context, '保存成功', type: AppToastType.success);
}

View File

@@ -4,6 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../core/app_colors.dart';
import '../../core/navigation_provider.dart';
import '../../providers/auth_provider.dart';
import '../../providers/backoffice_refresh_providers.dart';
import '../../utils/backoffice_formatters.dart';
import '../../widgets/app_toast.dart';
import '../../widgets/backoffice_ui.dart';
@@ -75,6 +76,8 @@ class _DoctorReportDetailPageState
if (!mounted) return;
setState(() => _submitted = true);
ref.invalidate(_reportDetailProvider(widget.id));
ref.read(doctorReportsRefreshSignalProvider.notifier).trigger();
ref.read(doctorDashboardRefreshSignalProvider.notifier).trigger();
if (mounted) {
AppToast.show(context, '审核提交成功', type: AppToastType.success);
}

View File

@@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../core/app_colors.dart';
import '../../core/navigation_provider.dart';
import '../../providers/auth_provider.dart';
import '../../providers/backoffice_refresh_providers.dart';
import '../../utils/backoffice_formatters.dart';
import '../../widgets/backoffice_ui.dart';
@@ -10,6 +11,7 @@ final _reportsProvider = FutureProvider<List<Map<String, dynamic>>>((
ref,
) async {
ref.watch(userSessionIdentityProvider);
ref.watch(doctorReportsRefreshSignalProvider);
final api = ref.read(apiClientProvider);
final res = await api.get('/api/doctor/reports');
return (res.data['data'] as List?)?.cast<Map<String, dynamic>>() ?? [];