feat: iOS 审核阉割版 - iOS 蓝牙功能屏蔽 + Info.plist 删蓝牙权限 + AI 提示词去医疗化(应对 App Store 1.4.1)

- iOS 蓝牙 UI 入口用 Platform.isIOS 屏蔽(抽屉/设置页/记数据卡片/AI 嵌入链接)
- Info.plist 删除 NSBluetoothAlwaysUsageDescription 和 NSBluetoothPeripheralUsageDescription
- AI 提示词重写:只描述客观事实和综合信息,不给医疗建议,不做关联性分析/推测
- 所有"专家/教练/预问诊/预解读"角色改为"记录/整理/结构化提取助手"
- 去掉基于疾病(冠心病/糖尿病等)的饮食运动建议
- 保留正常值参考范围用于客观描述"超出范围",不作诊断
This commit is contained in:
MingNian
2026-07-21 11:57:54 +08:00
parent 28f704c98e
commit 5cd3584ae9
8 changed files with 122 additions and 104 deletions

View File

@@ -26,10 +26,6 @@
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>需要使用蓝牙连接支持的血压计等健康设备,以同步用户主动测量的健康数据</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>需要使用蓝牙连接支持的血压计等健康设备</string>
<key>NSCameraUsageDescription</key>
<string>需要使用相机拍摄饮食照片和体检报告,以便 AI 分析和记录</string>
<key>NSMicrophoneUsageDescription</key>

View File

@@ -1194,7 +1194,9 @@ class ChatMessagesView extends ConsumerWidget {
pushRoute(ref, 'reports');
break;
case 'device':
pushRoute(ref, 'devices');
if (!Platform.isIOS) {
pushRoute(ref, 'devices');
}
break;
default:
if (uri.host.isNotEmpty) pushRoute(ref, uri.host);
@@ -2148,7 +2150,12 @@ final _agentActions = <ActiveAgent, List<_AgentAction>>{
};
extension _AgentActionsExt on ActiveAgent {
List<_AgentAction> get actions =>
_agentActions[this] ??
[const _AgentAction(label: '开始对话', icon: Icons.chat_outlined)];
List<_AgentAction> get actions {
final all = _agentActions[this] ??
[const _AgentAction(label: '开始对话', icon: Icons.chat_outlined)];
if (Platform.isIOS) {
return all.where((a) => a.route != 'devices').toList();
}
return all;
}
}

View File

@@ -1,3 +1,4 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
@@ -49,11 +50,12 @@ class SettingsPage extends ConsumerWidget {
title: '长辈模式',
onTap: () => pushRoute(ref, 'elderMode'),
),
_SettingsTile(
icon: LucideIcons.bluetooth,
title: '蓝牙设备',
onTap: () => pushRoute(ref, 'devices'),
),
if (!Platform.isIOS)
_SettingsTile(
icon: LucideIcons.bluetooth,
title: '蓝牙设备',
onTap: () => pushRoute(ref, 'devices'),
),
_SettingsTile(
icon: LucideIcons.bell,
title: '消息通知',

View File

@@ -1,3 +1,4 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
@@ -371,7 +372,7 @@ class _NavigationSection extends StatelessWidget {
@override
Widget build(BuildContext context) {
final elderMode = ElderModeScope.enabledOf(context);
final items = [
final allItems = <_NavItem>[
_NavItem(
icon: LucideIcons.folderHeart,
title: '档案',
@@ -421,6 +422,9 @@ class _NavigationSection extends StatelessWidget {
colors: AppColors.deviceGradient.colors,
),
];
final items = Platform.isIOS
? allItems.where((item) => item.route != 'devices').toList()
: allItems;
return _LightSection(
title: '常用功能',