- AI 提示词拆分为 markdown 模块(Prompts/global + modules + rag + router) - 新增 AI 同意门控(用户需同意后才能使用 AI 功能) - 新增 AI 录入草稿存储(AiEntryDraftContracts/EfAiEntryDraftStore/AiEntryDraftRecord) - 新增 AI 意图路由(ai_intent_router) - 新增医疗引用知识库(MedicalCitationKnowledge) - 重构 prompt_manager 和 ai_chat_endpoints - 优化聊天/趋势/档案/抽屉/医生端等多个页面 UI - 新增 agent 插画和趋势指标图标资源 - 删除 HANDOFF-2026-07-17.md
57 lines
1.5 KiB
Dart
57 lines
1.5 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import 'auth_provider.dart' show localDbProvider;
|
|
|
|
const aiConsentVersion = 'ai-data-consent-v1';
|
|
|
|
class AiConsentState {
|
|
final bool isLoading;
|
|
final bool granted;
|
|
final String? userId;
|
|
|
|
const AiConsentState({
|
|
this.isLoading = true,
|
|
this.granted = false,
|
|
this.userId,
|
|
});
|
|
|
|
AiConsentState copyWith({bool? isLoading, bool? granted, String? userId}) {
|
|
return AiConsentState(
|
|
isLoading: isLoading ?? this.isLoading,
|
|
granted: granted ?? this.granted,
|
|
userId: userId ?? this.userId,
|
|
);
|
|
}
|
|
}
|
|
|
|
final aiConsentProvider = NotifierProvider<AiConsentNotifier, AiConsentState>(
|
|
AiConsentNotifier.new,
|
|
);
|
|
|
|
class AiConsentNotifier extends Notifier<AiConsentState> {
|
|
@override
|
|
AiConsentState build() => const AiConsentState();
|
|
|
|
String _key(String userId) => '$aiConsentVersion:$userId';
|
|
|
|
Future<void> load(String userId) async {
|
|
state = AiConsentState(isLoading: true, userId: userId);
|
|
final value = await ref.read(localDbProvider).read(_key(userId));
|
|
state = AiConsentState(
|
|
isLoading: false,
|
|
granted: value == 'granted',
|
|
userId: userId,
|
|
);
|
|
}
|
|
|
|
Future<void> grant(String userId) async {
|
|
await ref.read(localDbProvider).write(_key(userId), 'granted');
|
|
state = AiConsentState(isLoading: false, granted: true, userId: userId);
|
|
}
|
|
|
|
Future<void> revoke(String userId) async {
|
|
await ref.read(localDbProvider).delete(_key(userId));
|
|
state = AiConsentState(isLoading: false, granted: false, userId: userId);
|
|
}
|
|
}
|