鸿蒙期末作业记录3(书城页面)

书城页面的构建

        之前用Tabs写完了MainPage页面,然后就该详细的页面了,我最开始写的就是这个书城页面,因为我感觉后面的不太好写🥺

        ps:这个页面参考了某佩、某江😊

组件基本介绍

        这个是MainPage第二个 TabContent()调用的页面,下面是他组件的构成,总的来说是最外层一个column组件,最上方的Text组件是“推荐”,image是图片(是芙蓉嘻嘻),紧接着是一个Row组件,这个组件是“标签、排行”那一栏,剩下的是一个List集合,list集合里面是两个listItem组件,“本周力荐”里面是可以横向滑动,“畅销热追”里面可以竖向滑动,这个是基本介绍。

实验过程

Bug

        其实这个页面有个没解决的bug,我不得已才弄成这样。我本来想象的页面是整个页面可以滑动,我是将大概页面写的差不多才想起来要可以滑动页面的,所以到后面设置List组件的时候一团乱。如下图:真给我看笑了。

因为这个组件太多了不好搞,我就只弄成了下方可以滑动,成了现在的组件样式

还有一个Bug,是我用了List之后,下滑的时候,最后一部分总是显示不全

解决:最后在list那里写这个就好啦

具体操作

这些基本组件没什么好记录的,按照自己的审美来就是了。

下面是一些与其他页面联动的东西

点击图书信息之后通过页面路由转跳到另一个页面,并且将图书的图片、作者姓名、图书名通过页面路由的传参传到另一个页面。

所以我抽调出来了类,做了页面传递

抽调的类:

export class BookStoreInfo{
  img:Resource
  name:string
  author:string

  constructor(img:Resource,name:string,author:string) {
    this.img=img;
    this.name=name;
    this.author=author
  }
}
@State arr:Array<BookStoreInfo>=[
    new BookStoreInfo($r('app.media.novel1'),'嘻嘻嘻','嘻嘻嘻'),
    new BookStoreInfo($r('app.media.novel2'),'嘻嘻嘻','嘻嘻嘻'),
    new BookStoreInfo($r('app.media.novel3'),'嘻嘻嘻','嘻嘻嘻'),
    new BookStoreInfo($r('app.media.novel4'),'嘻嘻嘻','嘻嘻嘻')
  ]

点击后页面路由代码:

onJumpClick1(): void {
    router.pushUrl({
      url: 'pages/MainAllPages/BookDetailPage',
      params: {
        Img: this.BookStoreInfo.img,
        Name:this.BookStoreInfo.name,
        Author:this.BookStoreInfo.author
      }
    }, router.RouterMode.Standard, (err) => {
      if (err) {
        console.error(`Invoke replaceUrl failed, code is ${err.code}, message is ${err.message}`);
        return;
      }
      console.info('Invoke replaceUrl succeeded.');
    });
  }

将图片传到另一个页面后,另一个页面会进行渲染得到如下图:

被码掉的是图书信息

这个页面下一篇博客记录   嘿嘿

还有一部分是点击书单之后会有新的页面跳转,跟上面本质上是一样的,就不记录啦,嘿嘿

记一下效果图,大概就是这样哈

该页面总代码:

import router from '@ohos.router'
import { BookStoreHotInfo } from '../MainInfo/BookStoreHotInfo'
import { BookStoreInfo } from '../MainInfo/BookStoreInfo'
@Component
export struct  BookStore {
  @State arr:Array<BookStoreInfo>=[
    new BookStoreInfo($r('app.media.novel1'),'嘻嘻嘻','嘻嘻嘻'),
    new BookStoreInfo($r('app.media.novel2'),'嘻嘻嘻','嘻嘻嘻'),
    new BookStoreInfo($r('app.media.novel3'),'嘻嘻嘻','嘻嘻嘻'),
    new BookStoreInfo($r('app.media.novel4'),'嘻嘻嘻','嘻嘻嘻')
  ]
  @State arrHot:Array<BookStoreHotInfo>=[
    new BookStoreHotInfo($r('app.media.novel5'),'嘻嘻嘻','嘻嘻嘻','嘻嘻嘻'),
    new BookStoreHotInfo($r('app.media.novel6'),'嘻嘻嘻','嘻嘻嘻','嘻嘻嘻'),
    new BookStoreHotInfo($r('app.media.novel1'),'嘻嘻嘻','嘻嘻嘻','嘻嘻嘻'),
  ]
  build(){
      Column() {
        Text('推荐')
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .margin(10)
        Image($r("app.media.king_fufu"))
          .height('15%')
          .width('100%')
          .borderRadius(10)
          .padding({ left: 10, right: 10 })
        Row() {
          Column() {
            Image($r("app.media.label"))
              .width(40)
            Text('标签')
          }
          .justifyContent(FlexAlign.Center)
          .backgroundColor('#FFB0B6')
          .width(60)
          .height(60)
          .borderRadius(15)
          .margin(4)

          Column() {
            Image($r("app.media.top"))
              .width(40)
            Text('排行')
          }
          .justifyContent(FlexAlign.Center)
          .backgroundColor('#FED19A')
          .width(60)
          .height(60)
          .borderRadius(15)
          .margin(4)


          Column() {
            Image($r("app.media.book"))
              .width(40)
              .onClick(()=>{
                router.pushUrl({
                  url:'pages/MainAllPages/Books'
                })
              })
            Text('书单')
          }
          .justifyContent(FlexAlign.Center)
          .backgroundColor('#58EDEB')
          .width(60)
          .height(60)
          .borderRadius(10)
          .margin(4)

          Column() {
            Image($r("app.media.free"))
              .width(40)
            Text('免费')
          }
          .justifyContent(FlexAlign.Center)
          .backgroundColor('#8FE0FE')
          .width(60)
          .height(60)
          .borderRadius(10)
          .margin(4)

          Column() {
            Image($r("app.media.finish"))
              .width(40)
            Text('完结')
          }
          .justifyContent(FlexAlign.Center)
          .backgroundColor('#CDCFFF')
          .width(60)
          .height(60)
          .margin(4)
          .borderRadius(10)
        }
        .height('15%')
        .margin({ left: 10, right: 10 })
        .backgroundColor(Color.White)
        .margin({ top: 10 })
        .borderRadius(20)
        .width('100%')
        .justifyContent(FlexAlign.SpaceAround)

        List({space:10}){
          ListItem(){
            Column() {
              Text('本周力荐')
                .fontWeight(FontWeight.Bolder)
                .fontSize(25)
                .margin({top:10,left:10})
                .width('100%')
              List({space:10}) {
                ForEach(this.arr, (item: BookStoreInfo) => {
                  ListItem() {
                    BookStoreCard({BookStoreInfo:item})
                      .margin({top:7})
                  }
                })
              }
              .listDirection(Axis.Horizontal)
            }
            .justifyContent(FlexAlign.SpaceAround)
            .backgroundColor(Color.White)
            .width('100%')
            .height(200)
            .margin({ top: 10 })
            .borderRadius(20)
          }
          ListItem(){
            Column() {
              Text('畅销热追')
                .fontWeight(FontWeight.Bolder)
                .fontSize(25)
                .width('100%')
                .margin({top:10,left:10})

              List() {
                ForEach(this.arrHot, (item: BookStoreHotInfo) => {
                  ListItem() {
                    BookStoreHotCard({BookStoreHotInfo:item})
                      .margin({top:7})
                  }
                })
              }
              .layoutWeight(1)
            }
            .backgroundColor(Color.White)
            .width('100%')
            .height(370)
            .margin({ top: 10 })
            .borderRadius(20)
          }
        }
        .margin({top:10,bottom:10})
        .height('100%')
        .width('100%')
        .layoutWeight(1)
        .padding({left:10,right:10})
        .alignListItem(ListItemAlign.Start)
      }
      .backgroundColor('#F4F4F4')
      .height('100%')

  }
}
@Component
struct BookStoreCard{
  BookStoreInfo:BookStoreInfo;
  build(){
    Column({space:2}){
      Image(this.BookStoreInfo.img)
        .width(70)
        .height(100)
        .margin({right:10})
        .onClick(()=>{
          this.onJumpClick1()
        })
      Text(this.BookStoreInfo.name)
      Text(this.BookStoreInfo.author)
        .fontColor('#ff7e7e7e')
    }
  }
   onJumpClick1(): void {
    router.pushUrl({
      url: 'pages/MainAllPages/BookDetailPage',
      params: {
        Img: this.BookStoreInfo.img,
        Name:this.BookStoreInfo.name,
        Author:this.BookStoreInfo.author
      }
    }, router.RouterMode.Standard, (err) => {
      if (err) {
        console.error(`Invoke replaceUrl failed, code is ${err.code}, message is ${err.message}`);
        return;
      }
      console.info('Invoke replaceUrl succeeded.');
    });
  }
}

@Component
struct BookStoreHotCard{
  BookStoreHotInfo:BookStoreHotInfo;
  build(){
    Row({space:2}){
      Image(this.BookStoreHotInfo.img)
        .width(70)
        .height(100)
        .margin({right:10,left:10})
        .onClick(()=>{
          this.onJumpClick1()
        })
      Column(){
        Text(this.BookStoreHotInfo.name)
          .margin(10)
          .fontWeight(FontWeight.Bold)
        Text(this.BookStoreHotInfo.introduction)
          .margin(10)
          .fontColor('#ff7e7e7e')
        Text(this.BookStoreHotInfo.author)
          .fontColor('#ff7e7e7e')
      }
      .height(100)

    }
  }
  onJumpClick1(): void {
    router.pushUrl({
      url: 'pages/MainAllPages/BookDetailPage',
      params: {
        Img: this.BookStoreHotInfo.img,
        Name:this.BookStoreHotInfo.name,
        Author:this.BookStoreHotInfo.author
      }
    }, router.RouterMode.Standard, (err) => {
      if (err) {
        console.error(`Invoke replaceUrl failed, code is ${err.code}, message is ${err.message}`);
        return;
      }
      console.info('Invoke replaceUrl succeeded.');
    });
  }
}

总结

最大的收获是List和页面路由的学习,算是加深印象了吧

这篇博客到此为止,感谢观看

嘻嘻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值