山东大学创新实训项目个人博客——第四篇

本周是项目开发第五周,记录一下本周完成的工作。

一:注册界面的实现

我们的设想是注册以后自动登录,并向用户展示健康画像编辑界面。页面设计如下:

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和优化问诊界面对话信息的实时显示。此外也要优化界面显示,比如历史会话列表中的各个历史会话可以显示其总结内容作为标题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值