- 页面布局与数据展示
- 功能:在
build方法中,使用NavDestination和Column组件构建页面布局。包含背景图片、标题、网格列表、考试次数提示、考试时间和说明等信息的展示。 - 代码段:
- 功能:在
build() {
NavDestination() {
Column() {
Stack({
alignContent: Alignment.TopStart
}) {
Image($r('app.media.ic_app_background'))
.width('100%')
Column() {
Text('理论测试复习')
// 样式设置
Grid() {
ForEach(this.GridList, (item: GridItemType, index: number) => {
GridItem() {
Row() {
Image(item.img)
// 样式设置
Column() {
Text(item.name)
// 样式设置
Text(`${item.value}`)
// 样式设置
}
}
}
// 样式设置
}, (item: GridItemType) => JSON.stringify(item))
}
// 样式设置
Row() {
Image($r('app.media.course'))
// 样式设置
Text(`本期考试已考${ExaminationDetailObj.useExamNum}次,还剩${this.count}次机会,最高分${ExaminationDetailObj.highScore}分`)
// 样式设置
}
// 样式设置
Column() {
Column() {
Row() {
Text()
// 样式设置
Text('考试时间')
// 样式设置
}
// 样式设置
Text(`${ExaminationDetailObj.startTime}-${ExaminationDetailObj.endTime}`)
// 样式设置
}
Column() {
Row() {
Text()
// 样式设置
Text('考试说明')
// 样式设置
}
// 样式设置
Text(`${ExaminationDetailObj.content}`)
// 样式设置
}
}
// 样式设置
Button('开始考试')
// 样式设置
.onClick(() => {
this.pathStack.pushPathByName('MineStartTestPage', null);
})
}
// 样式设置
}
// 样式设置
}
// 样式设置
}
// 样式设置
.onReady((ctx: NavDestinationContext) => {
for (const key of Object.keys(ExaminationDetailObj)) {
if (key == 'totalScore') {
let obj: GridItemType = {
img: $r('app.media.course'),
name: ExaminationDetailInfoEnum[key],
value: `${Reflect.get(ExaminationDetailObj, key)}分`,
code: key
}
this.GridList.push(obj)
} else if (key == 'score') {
// 类似处理
} else if (key == 'hours') {
// 类似处理
} else if (key == 'topicNum') {
// 类似处理
}
}
})
}
- 数据填充与页面准备
- 功能:在
onReady生命周期函数中,遍历ExaminationDetailObj对象,根据不同的键值对,将相应的信息封装成GridItemType对象并添加到GridList中,实现网格列表的数据填充。 - 代码段:
- 功能:在
.onReady((ctx: NavDestinationContext) => {
for (const key of Object.keys(ExaminationDetailObj)) {
if (key == 'totalScore') {
let obj: GridItemType = {
img: $r('app.media.course'),
name: ExaminationDetailInfoEnum[key],
value: `${Reflect.get(ExaminationDetailObj, key)}分`,
code: key
}
this.GridList.push(obj)
} else if (key == 'score') {
// 类似处理
} else if (key == 'hours') {
// 类似处理
} else if (key == 'topicNum') {
// 类似处理
}
}
})
总结
通过以上代码的实现,我们在 HarmonyOS Next 中成功构建了一个考试详情页。利用 HarmonyOS 提供的组件化开发、状态管理和导航机制,我们可以方便地展示考试的详细信息,并支持用户点击开始考试按钮跳转到相应的考试页面。该页面结构清晰,易于维护和扩展,有助于开发者在 HarmonyOS Next 平台上快速开发出高质量的教育应用。