news 2026/5/14 22:12:49

【Flutter for OpenHarmony】Flutter三方库GAD-7焦虑量表的鸿蒙化适配与实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Flutter for OpenHarmony】Flutter三方库GAD-7焦虑量表的鸿蒙化适配与实战指南

【Flutter for OpenHarmony】Flutter三方库GAD-7焦虑量表的鸿蒙化适配与实战指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net


一、什么是GAD-7量表?

我是 IntMainJhy,上海某高校大一计算机专业的学生。GAD-7 是我做的第二个心理量表功能。

GAD-7 全称Generalized Anxiety Disorder-7,中文名叫"广泛性焦虑障碍量表-7项"。它是由纽约大学的 Robert L. Spitzer 等人于2006年开发的,专门用于筛查焦虑障碍。

GAD-7 vs PHQ-9 的区别

维度GAD-7PHQ-9
用途筛查焦虑障碍筛查抑郁症
评估时间过去2周过去2周
题数7题9题
满分21分27分
侧重点担忧、紧张、恐惧情绪低落、兴趣减退

二、GAD-7量表内容

2.1 七道题目

题号问题描述
1感觉紧张、焦虑或烦躁不安
2无法停止或控制担忧
3对各种事情担忧过多
4很难放松下来
5因为担忧而很难静坐
6变得容易烦恼或急躁
7感到害怕,好像有什么可怕的事会发生

2.2 评分标准

和 PHQ-9 一样:

选项含义分数
完全没有过去两周没有或几乎没有0分
好几天1-6天1分
一半以上天数7-11天2分
几乎每天12-14天3分

总分范围:0-21分

2.3 结果解读

分数焦虑程度建议
0-4无或极轻微焦虑正常范围
5-9轻度焦虑学习放松技巧
10-14中度焦虑建议咨询专业人士
15-21重度焦虑需要专业治疗

三、GAD-7数据模型

// lib/mental_health/models/gad7_model.dart/// GAD-7 量表题目classGAD7Questions{staticconstList<QuizQuestion>questions=[QuizQuestion(questionText:'感觉紧张、焦虑或烦躁不安',options:['完全没有','好几天','一半以上天数','几乎每天'],scores:[0,1,2,3],),QuizQuestion(questionText:'无法停止或控制担忧',options:['完全没有','好几天','一半以上天数','几乎每天'],scores:[0,1,2,3],),QuizQuestion(questionText:'对各种事情担忧过多',options:['完全没有','好几天','一半以上天数','几乎每天'],scores:[0,1,2,3],),QuizQuestion(questionText:'很难放松下来',options:['完全没有','好几天','一半以上天数','几乎每天'],scores:[0,1,2,3],),QuizQuestion(questionText:'因为担忧而很难静坐',options:['完全没有','好几天','一半以上天数','几乎每天'],scores:[0,1,2,3],),QuizQuestion(questionText:'变得容易烦恼或急躁',options:['完全没有','好几天','一半以上天数','几乎每天'],scores:[0,1,2,3],),QuizQuestion(questionText:'感到害怕,好像有什么可怕的事会发生',options:['完全没有','好几天','一半以上天数','几乎每天'],scores:[0,1,2,3],),];}/// GAD-7 结果解读classGAD7Interpretation{staticconstList<InterpretationRange>ranges=[InterpretationRange(minScore:0,maxScore:4,level:'无或极轻微焦虑',color:Color(0xFF27AE60),description:'你的焦虑水平处于正常范围。继续保持良好的心态。',suggestion:'建议保持规律运动和充足睡眠。',),InterpretationRange(minScore:5,maxScore:9,level:'轻度焦虑',color:Color(0xFFF39C12),description:'你可能有轻度焦虑。建议学习一些放松技巧。',suggestion:'建议尝试深呼吸、渐进性肌肉放松。',),InterpretationRange(minScore:10,maxScore:14,level:'中度焦虑',color:Color(0xFFE67E22),description:'你可能有中度焦虑症状。建议咨询专业人士。',suggestion:'建议寻求心理咨询师的帮助。',),InterpretationRange(minScore:15,maxScore:21,level:'重度焦虑',color:Color(0xFFE74C3C),description:'你可能有重度焦虑症状。需要专业治疗。',suggestion:'请寻求心理健康专业人士的帮助。',),];staticInterpretationRangegetInterpretation(int score){for(finalrangeinranges){if(score>=range.minScore&&score<=range.maxScore){returnrange;}}returnranges.first;}}

四、代码复用设计

GAD-7 和 PHQ-9 的实现逻辑几乎完全一样,只是题目不同。为了代码复用,我设计了一个通用的测试框架:

// lib/mental_health/models/quiz_model.dart/// 测试结果classQuizResult{finalint totalScore;finalint maxScore;finaldouble percentage;finalStringlevel;finalDateTimecompletedAt;finalQuizCategorycategory;finalMap<String,dynamic>interpretation;QuizResult({requiredthis.totalScore,requiredthis.maxScore,requiredthis.category,requiredthis.interpretation,}):percentage=(totalScore/maxScore)*100,level=interpretation['level']??'',completedAt=DateTime.now();}/// 通用测试服务classQuizService{/// 计算测试结果staticQuizResultcalculateResult({requiredQuizCategorycategory,requiredMap<int,int>answers,requiredList<QuizQuestion>questions,}){int totalScore=0;for(varentryinanswers.entries){totalScore+=questions[entry.key].scores[entry.value];}Map<String,dynamic>interpretation;if(category==QuizCategory.phq9){interpretation=PHQ9Interpretation.getInterpretation(totalScore).toMap();}else{interpretation=GAD7Interpretation.getInterpretation(totalScore).toMap();}returnQuizResult(totalScore:totalScore,maxScore:category.maxScore,category:category,interpretation:interpretation,);}}extensiononInterpretationRange{Map<String,dynamic>toMap(){return{'level':level,'color':color,'description':description,'suggestion':suggestion,};}}

五、心理健康双量表对比

为了帮助用户更好地理解自己的状态,我在 App 中做了一个双量表对比功能:

// lib/mental_health/widgets/dual_scale_widget.dart/// 双量表对比组件classDualScaleComparisonextendsStatelessWidget{finalQuizResultphq9Result;finalQuizResultgad7Result;constDualScaleComparison({super.key,requiredthis.phq9Result,requiredthis.gad7Result,});@overrideWidgetbuild(BuildContextcontext){returnCard(child:Padding(padding:constEdgeInsets.all(16),child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[constText('综合心理健康评估',style:TextStyle(fontSize:18,fontWeight:FontWeight.bold,),),constSizedBox(height:16),// PHQ-9 结果_buildResultBar(label:'抑郁倾向 (PHQ-9)',score:phq9Result.totalScore,maxScore:phq9Result.maxScore,color:QuizCategory.phq9.color,),constSizedBox(height:12),// GAD-7 结果_buildResultBar(label:'焦虑倾向 (GAD-7)',score:gad7Result.totalScore,maxScore:gad7Result.maxScore,color:QuizCategory.gad7.color,),constSizedBox(height:16),// 综合建议_buildSuggestion(),],),),);}Widget_buildResultBar({requiredStringlabel,required int score,required int maxScore,requiredColorcolor,}){finalpercentage=score/maxScore;returnColumn(crossAxisAlignment:CrossAxisAlignment.start,children:[Row(mainAxisAlignment:MainAxisAlignment.spaceBetween,children:[Text(label),Text('$score/$maxScore'),],),constSizedBox(height:4),LinearProgressIndicator(value:percentage,backgroundColor:color.withOpacity(0.2),valueColor:AlwaysStoppedAnimation(color),),],);}Widget_buildSuggestion(){finalhigherScore=phq9Result.totalScore>gad7Result.totalScore?'抑郁':'焦虑';returnContainer(padding:constEdgeInsets.all(12),decoration:BoxDecoration(color:constColor(0xFFFFF3E0),borderRadius:BorderRadius.circular(8),),child:Row(children:[constIcon(Icons.info_outline,color:Color(0xFFFF9800)),constSizedBox(width:8),Expanded(child:Text('你的${higherScore}倾向相对较高,建议多关注这方面的心理调节。',style:constTextStyle(fontSize:13),),),],),);}}

六、我的踩坑记录

坑1:PHQ-9 和 GAD-7 结果解读逻辑混淆

问题:两个量表的结果解读逻辑搞混了。

原因:两个量表的分数区间不同,解析函数写错了一个。

解决

// ✅ 正确写法:分别处理Map<String,dynamic>interpretation;if(category==QuizCategory.phq9){interpretation=PHQ9Interpretation.getInterpretation(totalScore).toMap();}else{interpretation=GAD7Interpretation.getInterpretation(totalScore).toMap();}

七、大一学生真实学习总结

做 GAD-7 功能让我学到了代码复用的重要性。GAD-7 和 PHQ-9 的实现几乎完全一样,如果没有设计好通用框架,代码会非常冗余。

后来我重构了代码,设计了一个通用测试框架:

  • 通用题目模型
  • 通用结果计算
  • 通用结果显示

这样以后再添加新的量表,只需要添加题目数据和解读逻辑,不用重复写页面代码。


作者:IntMainJhy
创作时间:2026年5月

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 22:12:43

对比直接使用厂商API体验Taotoken在路由与容灾上的价值

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用厂商API体验Taotoken在路由与容灾上的价值 在开发过程中&#xff0c;依赖单一模型服务商的API接口是常见的做法。然而…

作者头像 李华
网站建设 2026/5/14 22:10:40

算法融合自动紧急制动控制策略【附程序】

✨ 长期致力于自动紧急制动、路面识别、模糊算法、模型预测控制、联合仿真研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于模糊逻辑的路面附着系数…

作者头像 李华
网站建设 2026/5/14 22:10:26

如何在pycharm中连接jupyter notebook?

前置条件: 你已经安装了Anaconda,并给予conda创建了自己的虚拟环境 管理员模式 打开 Anaconda Prompt终端,如图所示 依次输入下述指令 # 创建你的虚拟环境 conda create -n langgraph_env# 激活你的虚拟环境 conda activate langgraph_env# 安装 ipykernel&#xff08;确保环…

作者头像 李华
网站建设 2026/5/14 22:09:38

使用taotoken cli工具一键配置多开发环境与团队协作规范

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用taotoken cli工具一键配置多开发环境与团队协作规范 在团队协作开发中&#xff0c;统一大模型API的接入配置是一个常见痛点。每…

作者头像 李华
网站建设 2026/5/14 22:09:09

如何快速获取学术论文:SciDownl终极指南与完整教程

如何快速获取学术论文&#xff1a;SciDownl终极指南与完整教程 【免费下载链接】SciDownl An unofficial api for downloading papers from SciHub via DOI, PMID, title 项目地址: https://gitcode.com/gh_mirrors/sc/SciDownl 在学术研究的道路上&#xff0c;你是否曾…

作者头像 李华
网站建设 2026/5/14 22:08:30

CircuitPython REPL与库管理:嵌入式硬件交互调试与项目构建实战

1. CircuitPython REPL&#xff1a;你的硬件交互式调试利器如果你是从Arduino或者MicroPython转过来的嵌入式开发者&#xff0c;第一次接触CircuitPython的REPL&#xff08;Read-Eval-Print Loop&#xff0c;读取-求值-打印循环&#xff09;时&#xff0c;可能会觉得它既熟悉又…

作者头像 李华