HarmonyOS Next 教育应用之考试详情页开发(二)

96 阅读1分钟
  1. 页面布局与数据展示
    • 功能:在 build 方法中,使用 NavDestinationColumn 组件构建页面布局。包含背景图片、标题、网格列表、考试次数提示、考试时间和说明等信息的展示。
    • 代码段
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') {
        // 类似处理
      }
    }
  })
}
  1. 数据填充与页面准备
    • 功能:在 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 平台上快速开发出高质量的教育应用。