feat: 三端抽屉重构 + 配色系统更新 + 后台管理页精调 + 键盘抬起组件
## 抽屉重构 - admin_drawer / doctor_drawer / health_drawer 三端抽屉全部重做 - drawer_shell 增强 ## 配色系统 - app_colors / app_module_visuals / app_theme 更新 - app.dart 启动流程调整 ## 后台管理页 - admin_doctors_page 大幅重构(+251) - admin_home / doctor_dashboard / doctor_reports / doctor_home / doctor_followups / doctor_settings 精调 ## 患者端 - home_page / chat_messages_view / medication_list / notification_center / remaining_pages / exercise_plan / device / diet / consultation 微调 ## 新增 - keyboard_lift.dart: 键盘抬起处理组件 - AGENTS.md: agent 指引文档 ## 其他 - api_client IP 适配 - app_future_view 增强 - data_providers 调整 - secondary_page_visuals_test 更新
This commit is contained in:
@@ -24,24 +24,10 @@ class EnterpriseExercisePlanPage extends ConsumerStatefulWidget {
|
||||
|
||||
class _EnterpriseExercisePlanPageState
|
||||
extends ConsumerState<EnterpriseExercisePlanPage> {
|
||||
Future<List<Map<String, dynamic>>>? _future;
|
||||
final Set<String> _busyItems = {};
|
||||
final Set<String> _deletingPlans = {};
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_load();
|
||||
}
|
||||
|
||||
void _load() => setState(() {
|
||||
_future = ref.read(exerciseServiceProvider).getPlans();
|
||||
});
|
||||
|
||||
Future<void> _refresh() async {
|
||||
_load();
|
||||
await _future;
|
||||
}
|
||||
Future<void> _refresh() => ref.refresh(exercisePlansProvider.future);
|
||||
|
||||
Future<void> _toggleCheckIn(String itemId) async {
|
||||
if (itemId.isEmpty || _busyItems.contains(itemId)) return;
|
||||
@@ -49,7 +35,7 @@ class _EnterpriseExercisePlanPageState
|
||||
try {
|
||||
await ref.read(exerciseServiceProvider).checkIn(itemId);
|
||||
ref.invalidate(currentExercisePlanProvider);
|
||||
_load();
|
||||
ref.invalidate(exercisePlansProvider);
|
||||
} catch (error) {
|
||||
if (mounted) {
|
||||
AppToast.show(
|
||||
@@ -88,7 +74,7 @@ class _EnterpriseExercisePlanPageState
|
||||
try {
|
||||
await ref.read(exerciseServiceProvider).deletePlan(id);
|
||||
ref.invalidate(currentExercisePlanProvider);
|
||||
_load();
|
||||
ref.invalidate(exercisePlansProvider);
|
||||
if (mounted) {
|
||||
AppToast.show(context, '运动计划已删除', type: AppToastType.success);
|
||||
}
|
||||
@@ -119,9 +105,9 @@ class _EnterpriseExercisePlanPageState
|
||||
tooltip: '新建运动计划',
|
||||
onPressed: () => pushRoute(ref, 'exerciseCreate'),
|
||||
),
|
||||
body: AppFutureView<List<Map<String, dynamic>>>(
|
||||
future: _future,
|
||||
onRetry: _load,
|
||||
body: AppAsyncValueView<List<Map<String, dynamic>>>(
|
||||
value: ref.watch(exercisePlansProvider),
|
||||
onRetry: () => ref.invalidate(exercisePlansProvider),
|
||||
errorTitle: '运动计划加载失败',
|
||||
onData: (_, plans) {
|
||||
if (plans.isEmpty) {
|
||||
|
||||
Reference in New Issue
Block a user