feat: AI Agent 处理器扩展 + 服药打卡确认链路 + AI 气泡配色微调 + 数据刷新 providers 抽离 + 多端页面细节调整
This commit is contained in:
@@ -9,10 +9,20 @@ void main() {
|
||||
|
||||
expect(container.read(adminDoctorsRefreshSignalProvider), 0);
|
||||
expect(container.read(doctorFollowupsRefreshSignalProvider), 0);
|
||||
expect(container.read(doctorReportsRefreshSignalProvider), 0);
|
||||
expect(container.read(doctorDashboardRefreshSignalProvider), 0);
|
||||
|
||||
container.read(adminDoctorsRefreshSignalProvider.notifier).trigger();
|
||||
|
||||
expect(container.read(adminDoctorsRefreshSignalProvider), 1);
|
||||
expect(container.read(doctorFollowupsRefreshSignalProvider), 0);
|
||||
expect(container.read(doctorReportsRefreshSignalProvider), 0);
|
||||
expect(container.read(doctorDashboardRefreshSignalProvider), 0);
|
||||
|
||||
container.read(doctorReportsRefreshSignalProvider.notifier).trigger();
|
||||
container.read(doctorDashboardRefreshSignalProvider.notifier).trigger();
|
||||
|
||||
expect(container.read(doctorReportsRefreshSignalProvider), 1);
|
||||
expect(container.read(doctorDashboardRefreshSignalProvider), 1);
|
||||
});
|
||||
}
|
||||
|
||||
21
health_app/test/data_refresh_providers_test.dart
Normal file
21
health_app/test/data_refresh_providers_test.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:health_app/providers/data_refresh_providers.dart';
|
||||
|
||||
void main() {
|
||||
test('patient data refresh signals advance independently', () {
|
||||
final container = ProviderContainer();
|
||||
addTearDown(container.dispose);
|
||||
|
||||
expect(container.read(exerciseDataRefreshSignalProvider), 0);
|
||||
expect(container.read(medicationDataRefreshSignalProvider), 0);
|
||||
expect(container.read(dietDataRefreshSignalProvider), 0);
|
||||
|
||||
container.read(exerciseDataRefreshSignalProvider.notifier).trigger();
|
||||
container.read(medicationDataRefreshSignalProvider.notifier).trigger();
|
||||
|
||||
expect(container.read(exerciseDataRefreshSignalProvider), 1);
|
||||
expect(container.read(medicationDataRefreshSignalProvider), 1);
|
||||
expect(container.read(dietDataRefreshSignalProvider), 0);
|
||||
});
|
||||
}
|
||||
@@ -46,6 +46,22 @@ void main() {
|
||||
expect(messageAtDisplayIndex(messages, 1).id, 'user');
|
||||
});
|
||||
|
||||
test('loaded history keeps one current health card at the top', () {
|
||||
final history = [
|
||||
ChatMessage(
|
||||
id: 'history-message',
|
||||
role: 'user',
|
||||
content: '历史消息',
|
||||
createdAt: DateTime(2026, 1, 1),
|
||||
),
|
||||
];
|
||||
|
||||
final withCard = prependTodayHealthCard(history, now: DateTime(2026, 1, 2));
|
||||
|
||||
expect(withCard.first.type, MessageType.taskCard);
|
||||
expect(withCard[1].id, 'history-message');
|
||||
});
|
||||
|
||||
test('today health keeps one cached snapshot during background refresh', () {
|
||||
final providers = File(
|
||||
'lib/providers/data_providers.dart',
|
||||
@@ -112,10 +128,7 @@ void main() {
|
||||
final source = File('lib/pages/home/home_page.dart').readAsStringSync();
|
||||
|
||||
expect(source, contains('drawerEnableOpenDragGesture: false'));
|
||||
expect(
|
||||
source,
|
||||
contains('onHorizontalDragUpdate: _updateConversationDrawerDrag'),
|
||||
);
|
||||
expect(source, contains('_updateConversationDrawerDrag,'));
|
||||
expect(source, isNot(contains('_drawerDragStartX')));
|
||||
});
|
||||
|
||||
@@ -159,4 +172,16 @@ void main() {
|
||||
expect(input, isNot(contains('Border.all(color: AppColors.borderLight)')));
|
||||
expect(source, isNot(contains('class _RoundToolButton')));
|
||||
});
|
||||
|
||||
test('keyboard translates the conversation layer without state updates', () {
|
||||
final home = File('lib/pages/home/home_page.dart').readAsStringSync();
|
||||
final keyboard = File('lib/widgets/keyboard_lift.dart').readAsStringSync();
|
||||
|
||||
expect(home, contains('KeyboardTranslate('));
|
||||
expect(home, contains('resizeToAvoidBottomInset: false'));
|
||||
expect(keyboard, contains('class KeyboardTranslate'));
|
||||
expect(keyboard, contains('Transform.translate('));
|
||||
expect(keyboard, contains('child: RepaintBoundary(child: child)'));
|
||||
expect(keyboard, isNot(contains('setState(')));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -7,6 +7,15 @@ import 'package:health_app/pages/remaining_pages.dart';
|
||||
import 'package:health_app/services/health_ble_service.dart';
|
||||
|
||||
void main() {
|
||||
test('manual entry keyboard does not relayout the trend dashboard', () {
|
||||
final source = File('lib/pages/chart/trend_page.dart').readAsStringSync();
|
||||
|
||||
expect(source, contains('resizeToAvoidBottomInset: false'));
|
||||
expect(source, contains('class _KeyboardInsetPadding'));
|
||||
expect(source, contains('MediaQuery.viewInsetsOf(context).bottom'));
|
||||
expect(source, contains('child: RepaintBoundary('));
|
||||
});
|
||||
|
||||
test('unknown trend metric falls back to blood pressure', () {
|
||||
expect(normalizeTrendMetricType('unknown_metric'), 'blood_pressure');
|
||||
expect(normalizeTrendMetricType(null), 'blood_pressure');
|
||||
|
||||
@@ -178,7 +178,8 @@ void main() {
|
||||
);
|
||||
|
||||
expect(row, contains('AppModuleVisuals.exercise.icon'));
|
||||
expect(row, contains('color: AppColors.exerciseLight'));
|
||||
expect(row, contains('color: _phaseColor(phase).withValues(alpha: 0.10)'));
|
||||
expect(row, contains('color: _phaseColor(phase)'));
|
||||
expect(row, contains('left: 68'));
|
||||
expect(row, isNot(contains('width: 16')));
|
||||
final modules = File('lib/core/app_module_visuals.dart').readAsStringSync();
|
||||
|
||||
Reference in New Issue
Block a user