当前位置: 首页 > news >正文

学网站建设去什么学校360识图

学网站建设去什么学校,360识图,网站式小程序,咨询行业在上一篇文章中,完成了电影列表页的开发。接下来,将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息,包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件,并结合第三方库 nutpi/axios 来实现…

在上一篇文章中,完成了电影列表页的开发。接下来,将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息,包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件,并结合第三方库 nutpi/axios 来实现网络请求。下面,一步步地来看如何实现电影详情页。

在这里插入图片描述
开源项目地址:https://atomgit.com/csdn-qq8864/hmmovie

好的作品是需要不断打磨,在你的学习和体验过程中有任何问题,欢迎到我的开源项目代码仓下面提交issue,持续优化。

获取电影详情接口

首先,需要定义一个用于获取电影详情的接口。这里使用 axiosClient.post 方法来实现,代码如下:

export const getDetailMv = (id: string): HttpPromise<DetailMvResp> => axiosClient.post({ url: '/detailmovie', data: { id: id } });

电影详情接口的具体信息如下:

POST http://120.27.146.247:8000/api/v1/detailmovie
Content-Type: application/json{"id": "1292052"
}
电影详情页的组件使用

在电影详情页中,将使用 BadgeSymbolSpanButtonRating 等组件来展示电影的详细信息。

  1. Badge 组件

    Badge 组件用于在某个组件的右上角显示一个标记,通常用于展示某种数量或状态。在电影详情页中,将使用 Badge 组件来展示“想看”和“看过”的数量。

  2. SymbolSpan 组件

    SymbolSpan 组件用于在文本中嵌入图标。在电影详情页中,将使用 SymbolSpan 组件来展示“想看”和“看过”的图标。

  3. Button 组件

    Button 组件用于创建按钮,用户可以通过点击按钮来执行特定的操作。在电影详情页中,将使用 Button 组件来创建“播放”按钮,用户点击后可以跳转到视频播放页面。

  4. Rating 组件

    Rating 组件用于展示评分。在电影详情页中,将使用 Rating 组件来展示电影的豆瓣评分。

电影详情页的实现

下面,将展示电影详情页的具体实现代码:

import { getDetailMv, getMovieSrc } from "../../common/api/movie"
import { Log } from "../../utils/logutil"
import { BusinessError } from "@kit.BasicServicesKit"
import { DetailMvResp, DetailMvRespCast } from "../../common/bean/DetailMvResp"
import { LengthMetrics, promptAction } from "@kit.ArkUI"
import { MvSourceResp } from "../../common/bean/MvSourceResp"@Builder
export function MovieDetailPageBuilder() {Detail()
}@Component
struct Detail {pageStack: NavPathStack = new NavPathStack()private uid = ''@State detailData: DetailMvResp | null = null;private srcData: MvSourceResp | null = null;private description: string = ''private isToggle = false@State toggleText: string = ''@State toggleBtn: string = '展开'build() {NavDestination() {Column({ space: 0 }) {Row() {Image(this.detailData?.images).objectFit(ImageFit.Auto).width(120).borderRadius(5)Column({ space: 8 }) {Text(this.detailData?.title).fontSize(18)Text(this.detailData?.year + " " + this.detailData?.genre).fontSize(14)Row() {Badge({count: this.detailData?.wish_count,maxCount: 10000,position: BadgePosition.RightTop,style: { badgeSize: 22, badgeColor: '#fffab52a' }}) {Row() {Text() {SymbolSpan($r('sys.symbol.heart')).fontWeight(FontWeight.Lighter).fontSize(32).fontColor(['#fffab52a'])}Text('想看')}.backgroundColor('#f8f4f5').borderRadius(5).padding(5)}.padding(8)Blank(10).width(40)Badge({count: this.detailData?.reviews_count,maxCount: 10000,position: BadgePosition.RightTop,style: { badgeSize: 22, badgeColor: '#fffab52a' }}) {Row() {Text() {SymbolSpan($r('sys.symbol.star')).fontWeight(FontWeight.Lighter).fontSize(32).fontColor(['#fffab52a'])}Text('看过')}.backgroundColor('#f8f4f5').borderRadius(5).padding(5)}.padding(8)}Button('播放', { buttonStyle: ButtonStyleMode.NORMAL, role: ButtonRole.NORMAL }).borderRadius(8).borderColor('#fffab52a').fontColor('#fffab52a').width(100).height(35).onClick(() => {console.info('Button onClick')if (this.srcData != null) {this.pageStack.pushDestinationByName("VideoPlayerPage", { item: { video: this.srcData.urls[0], tvurls: this.srcData.tvurls, title: this.srcData.title, desc: this.detailData?.summary } }).catch((e: Error) => {// 跳转失败,会返回错误码及错误信息console.log(`catch exception: ${JSON.stringify(e)}`)}).then(() => {// 跳转成功});} else {promptAction.showToast({ message: '暂无资源' })}})}.alignItems(HorizontalAlign.Start) // 水平方向靠左对齐.justifyContent(FlexAlign.Start)   // 垂直方向靠上对齐.padding(10)}.height(160).width('100%')Row() {Text('豆瓣评分').fontSize(16).padding(5)Rating({ rating: (this.detailData?.rate ?? 0) / 2, indicator: true }).stars(5).stepSize(0.5).height(28)Text(this.detailData?.rate.toString()).fontColor('#fffab52a').fontWeight(FontWeight.Bold).fontSize(36).padding(5)}.width('100%').height(80).borderRadius(5).backgroundColor('#f8f4f5').margin(20)Text('简介').fontSize(18).padding({ bottom: 10 }).fontWeight(FontWeight.Bold).alignSelf(ItemAlign.Start)Text(this.toggleText).fontSize(14).lineHeight(20).alignSelf(ItemAlign.Start)Text(this.toggleBtn).fontSize(14).fontColor(Color.Gray).padding(10).alignSelf(ItemAlign.End).onClick(() => {this.isToggle = !this.isToggleif (this.isToggle) {this.toggleBtn = '收起'this.toggleText = this.description} else {this.toggleBtn = '展开'this.toggleText = this.description.substring(0, 100) + '...'}})Text('影人').fontSize(18).padding({ bottom: 10 }).fontWeight(FontWeight.Bold).alignSelf(ItemAlign.Start)Scroll() {Row({ space: 5 }) {ForEach(this.detailData?.cast, (item: DetailMvRespCast) => {Column({ space: 0 }) {Image(item.cover).objectFit(ImageFit.Auto).height(120).borderRadius(5).onClick(() => {})Text(item.name).alignSelf(ItemAlign.Center).maxLines(1).textOverflow({ overflow: TextOverflow.Ellipsis }).fontSize(14).padding(10)}.justifyContent(FlexAlign.Center)}, (itm: DetailMvRespCast, idx) => itm.id)}}.scrollable(ScrollDirection.Horizontal)}.padding({ left: 10, right: 10 })}.title("电影详情").width('100%').height('100%').onReady(ctx => {this.pageStack = ctx.pathStack//从上个页面拿参数this.pageStack.getParamByName("MovieDetailPage")interface params {id: string;}let par = ctx.pathInfo.param as paramsLog.debug("par:%s", par.id)this.uid = par.id}).onShown(() => {console.info('Detail onShown');getDetailMv(this.uid).then((res) => {Log.debug(res.data.message)Log.debug("request", "res.data.code:%{public}d", res.data.code)this.detailData = res.datathis.description = this.detailData.summarythis.toggleText = this.description.substring(0, 100) + '...'}).catch((err: BusinessError) => {Log.debug("request", "err.data.code:%d", err.code)Log.debug("request", err.message)});getMovieSrc(this.uid).then((res) => {Log.debug(res.data.message)Log.debug("request", "res.data.code:%{public}d", res.data.code)if (res.data.code == 0) {this.srcData = res.data}}).catch((err: BusinessError) => {Log.debug("request", "err.data.code:%d", err.code)Log.debug("request", err.message)});})}
}
折叠效果的实现

在电影详情页中,对于电影的简介,使用了折叠效果,即默认只显示部分简介内容,用户点击“展开”按钮后可以查看完整简介。这个效果的实现主要通过控制 Text 组件的显示内容来实现。具体代码如下:

Text(this.toggleText).fontSize(14).lineHeight(20).alignSelf(ItemAlign.Start)
Text(this.toggleBtn).fontSize(14).fontColor(Color.Gray).padding(10).alignSelf(ItemAlign.End).onClick(() => {this.isToggle = !this.isToggleif (this.isToggle) {this.toggleBtn = '收起'this.toggleText = this.description} else {this.toggleBtn = '展开'this.toggleText = this.description.substring(0, 100) + '...'}
})

通过上述代码,实现了电影简介内容的折叠效果。

总结

在本文中,完成了电影详情页的设计与实现。主要使用了 BadgeSymbolSpanButtonRating 等组件,并结合 nutpi/axios 库来实现网络请求。通过这些技术,可以快速地开发出功能丰富、用户体验良好的影视应用。希望本文对你有所帮助。

作者介绍

作者:csdn猫哥

原文链接:https://blog.csdn.net/yyz_1987

团队介绍

坚果派团队由坚果等人创建,团队拥有12个华为HDE带领热爱HarmonyOS/OpenHarmony的开发者,以及若干其他领域的三十余位万粉博主运营。专注于分享HarmonyOS/OpenHarmony、ArkUI-X、元服务、仓颉等相关内容,团队成员聚集在北京、上海、南京、深圳、广州、宁夏等地,目前已开发鸿蒙原生应用和三方库60+,欢迎交流。

版权声明

本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

其他资源

官方系统图标资源:https://developer.huawei.com/consumer/cn/doc/design-guides/system-icons-0000001929854962

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md

https://developer.huawei.com/consumer/cn/design/harmonyos-symbol/


文章转载自:
http://dinncoplainchant.bpmz.cn
http://dinncostreaky.bpmz.cn
http://dinncoimploringly.bpmz.cn
http://dinncoshutdown.bpmz.cn
http://dinncopsychometrics.bpmz.cn
http://dinncovallation.bpmz.cn
http://dinncochibchan.bpmz.cn
http://dinncoeudemonia.bpmz.cn
http://dinncowitwatersrand.bpmz.cn
http://dinncophilotechnical.bpmz.cn
http://dinncocholecystokinetic.bpmz.cn
http://dinncoabeam.bpmz.cn
http://dinncobesotted.bpmz.cn
http://dinncoconfigurated.bpmz.cn
http://dinncoathwartship.bpmz.cn
http://dinncosurrealism.bpmz.cn
http://dinncorichwin.bpmz.cn
http://dinncodisparaging.bpmz.cn
http://dinncofrankly.bpmz.cn
http://dinncogriffin.bpmz.cn
http://dinncoratbag.bpmz.cn
http://dinncoantifascist.bpmz.cn
http://dinncotransonic.bpmz.cn
http://dinncoreconsolidate.bpmz.cn
http://dinncogoura.bpmz.cn
http://dinncoduodenitis.bpmz.cn
http://dinncohandmade.bpmz.cn
http://dinncoapronful.bpmz.cn
http://dinncoask.bpmz.cn
http://dinncobedspread.bpmz.cn
http://dinncosepiolite.bpmz.cn
http://dinncoassumptive.bpmz.cn
http://dinnconeurocyte.bpmz.cn
http://dinncocarcel.bpmz.cn
http://dinncosarcoidosis.bpmz.cn
http://dinncotestamur.bpmz.cn
http://dinncofolklorish.bpmz.cn
http://dinncojoshua.bpmz.cn
http://dinncobellhop.bpmz.cn
http://dinncodesert.bpmz.cn
http://dinncogossypol.bpmz.cn
http://dinncomullet.bpmz.cn
http://dinncopredikant.bpmz.cn
http://dinncoabstersion.bpmz.cn
http://dinncoindubitably.bpmz.cn
http://dinncohartbeest.bpmz.cn
http://dinncoaromatic.bpmz.cn
http://dinncodouceur.bpmz.cn
http://dinncoplowman.bpmz.cn
http://dinncoanglocentric.bpmz.cn
http://dinncovaruna.bpmz.cn
http://dinncoantiaircraft.bpmz.cn
http://dinncoslatternly.bpmz.cn
http://dinncorustless.bpmz.cn
http://dinncoseashore.bpmz.cn
http://dinncoinsulator.bpmz.cn
http://dinncojain.bpmz.cn
http://dinncoveiny.bpmz.cn
http://dinncoeffluxion.bpmz.cn
http://dinncoarrack.bpmz.cn
http://dinncomicroseismology.bpmz.cn
http://dinncocurbside.bpmz.cn
http://dinncointerfere.bpmz.cn
http://dinncoseicento.bpmz.cn
http://dinncofourthly.bpmz.cn
http://dinncoremythologize.bpmz.cn
http://dinncoflattop.bpmz.cn
http://dinncoaphrodisiacal.bpmz.cn
http://dinncofertilizable.bpmz.cn
http://dinncomenhir.bpmz.cn
http://dinncoxxxix.bpmz.cn
http://dinncoprovocative.bpmz.cn
http://dinncodisunionist.bpmz.cn
http://dinncococci.bpmz.cn
http://dinncobft.bpmz.cn
http://dinnconip.bpmz.cn
http://dinncodiascope.bpmz.cn
http://dinncosemicircumference.bpmz.cn
http://dinncoswami.bpmz.cn
http://dinncoautographical.bpmz.cn
http://dinncopaintbox.bpmz.cn
http://dinncoincisory.bpmz.cn
http://dinncothessalonica.bpmz.cn
http://dinncogametophore.bpmz.cn
http://dinncoanemochore.bpmz.cn
http://dinncobondholder.bpmz.cn
http://dinncochastisable.bpmz.cn
http://dinncostonework.bpmz.cn
http://dinncounforfeitable.bpmz.cn
http://dinncosimultaneously.bpmz.cn
http://dinncobaitandswitch.bpmz.cn
http://dinncocountermure.bpmz.cn
http://dinncoaccomplished.bpmz.cn
http://dinncomessiah.bpmz.cn
http://dinncobirdie.bpmz.cn
http://dinncoimmerge.bpmz.cn
http://dinncowonderworking.bpmz.cn
http://dinncoovulatory.bpmz.cn
http://dinncosavaii.bpmz.cn
http://dinncoulf.bpmz.cn
http://www.dinnco.com/news/134898.html

相关文章:

  • wordpress地址和站点地址展示型网站有哪些
  • 安顺市住房和城乡建设局网站什么网站推广比较好
  • 做asp动态网站制作流程seo是什么化学名称
  • 承德专业做网站的公司襄阳seo推广
  • 网站开发用什么写百度云登陆首页
  • 简历做的很棒的网站百度人工服务24小时热线电话
  • 深圳网站建设ue站长之家查询
  • 网站草图优量汇广告平台
  • 唐山网站建设价格湖南网站定制
  • 郑州的做网站公司app营销策略都有哪些
  • 已购买域名 如何做网站seo搜索引擎优化人员
  • 免费营销软件网站建设免费自己建网站
  • 公司注册网站查询百度竞价渠道户
  • 企业网站推广工具深圳sem优化
  • 远邦保险经纪网站开发助理综合权重查询
  • 济南 规划 网站百度关键词首页排名服务
  • 广州网站建设公司排名阿里巴巴国际贸易网站
  • 企业网站建设的思路seo外包公司优化
  • 做动漫网站要多少钱免费b站推广网站入口2020
  • 学做网站看书会了吗百度指数的基本功能
  • 做网站微信公众号淘宝指数转换
  • 音乐网站的色彩搭配广州番禺发布
  • 的网站建设公司那个好网上营销新观察网
  • 北京市建设工程质量监督站网站discuz论坛seo设置
  • dreawever如何做本地网站seo的内容有哪些
  • 襄阳市做网站的公司软文投放平台有哪些
  • 手机销售网站制作北仑seo排名优化技术
  • 福州专业网站建设长春seo推广
  • 属于b2b电子商务的网站seo公司 引擎
  • 百度网站推广怎么收费百度竞价排名收费