本周是项目开发第五周,记录一下本周完成的工作。
一:注册界面的实现
我们的设想是注册以后自动登录,并向用户展示健康画像编辑界面。页面设计如下:





register目录如下:

由于后端已经实现了的注册api只实现了纯净的注册功能,不会与登录api一样返回用户token,所以注册后自动功能只能在前端实现。
在apiInterface中定义后端接口后再RegisterViewModel中使用:


定义asStateFlow属性的变量registerState:
![]()
然后在RegisterScreen中使用launchedeffect监听registerState,当用户注册成功时会修改registerState,LaunchedEffect监听到registerState变化后会再次运行,根据registerState的状态进入不同的分支。比如注册成功,就应该继续调用login方法,保存后端返回的用户token;再比如登录成功并再次修改registerState后,就会进入Success分支进行控制台输出。
LaunchedEffect(registerState) {
val state = registerState
Log.d("RegisterScreen", "LaunchedEffect triggered with state: $state")
when (state) {
is RegisterState.Registered -> {
Log.d("RegisterScreen", "RegisterState.Registered detected, calling login()")
viewModel.login(context, state.phone, state.password)
}
is RegisterState.Success -> {
Log.d("RegisterScreen", "RegisterState.Success detected, calling onRegisterSuccess()")
onRegisterSuccess()
}
else -> {}
}
}
以上就是注册后自动登录功能的实现。引导用户填写用户画像的界面与主界面中的”我的“界面除了多了一个进度条意外并无多大不同,所以不多赘述。
二:问诊阶段后端api适配
前一篇文章已经提到后端的问诊部分的api已经完成,于是这一周完成了适配,清单如下:

这周适配了除推进会话状态和获取预诊报告之外的api。在apiInterface中实现调用后端的接口:
@GET("sessions")
fun getSessions(): Call<BaseResponse<List<AgentSession>>>
@POST("session")
fun createSession(): Call<BaseResponse<AgentSession>>
@GET("sessions/{sessionId}")
fun getSessionMessages(
@Path("sessionId") sessionId: String
): Call<BaseResponse<List<ChatMessage>>>
@Multipart
@POST("sessions/{sessionId}/chat")
fun sendChat(
@Path("sessionId") sessionId: String,
@Part("content") content: RequestBody,
@Part("senderRole") senderRole: RequestBody
): Call<BaseResponse<ChatMessage>>
ConversationScreen初始化时,需要先查询历史会话列表,然后获取历史会话列表中创建最晚的会话的sessionId,根据这个sessionId获取该会话的详细内容并显示在该会话所在阶段对应的面板上(问诊、导航、康复)。此外用户在点击ConversationScreen左上角的历史会话按钮时,调用getSessions方法获取历史会话列表,再点击列表中的某个历史会话时,使用该会话的sessionId调用getSessionMessages方法查询会话详情并显示。以上为获取历史会话列表和获取指定会话的详情的api适配过程。
对于新建问诊会话api,我在右上角增加了“+”按钮用于新增问诊会话,当点击时调用createSession方法通知后端新增了一个问诊会话,并将后端返回的新sessionId作为新会话的sessionId,方便后续查询会话消息记录和发送消息。

对于发送消息api,由于我们后期要实现多模态输入,所以单独实现了一个输入组件并将其集成在ConsultationScreen和RehabilitationScreen的下方。点击发送按钮,调用sendChat方法将输入框中的内容发送给后端智能体。但是现在智能体的回复无法自动更新,需要去历史会话列表手动刷新一下才行。
下周的工作就是继续适配问诊api和优化问诊界面对话信息的实时显示。此外也要优化界面显示,比如历史会话列表中的各个历史会话可以显示其总结内容作为标题。

2412

被折叠的 条评论
为什么被折叠?



