鸿蒙next 电商实战项目 来了

news2024/11/24 16:22:12

前言:

最新在学习鸿蒙next 开发 就写了一个demo 今天就分享给大家一下

效果图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

客户端实现
  • 1 底部导航器实现
import choice from '../view/ChoicePage'
import HomePage from '../view/HomePage'
import MyPage from '../view/MyPage'
import Shoppingcar from '../view/Shoppingcar'
import prompt from '@ohos.promptAction';
import common from '@ohos.app.ability.common';





interface TabInterface{
  id:number
  title:string
  icon:ResourceStr
  selectIcon:ResourceStr
}
@Entry
@Component
struct Main {
  private backTime :number=0;
  showtoast(msg:string){
    prompt.showToast({
      message:msg
    })
  }
  //@State message: string = '首页';
  //Tabs组件的控制器,用于控制Tabs组件进行页签切换。
  private controller:TabsController = new TabsController();
  @State
  tablist:TabInterface [] = [{
    id:0,
    title:'首页',
    icon:$r('app.media.shouyeblue'),
    selectIcon:$r('app.media.shouyeblack')
    },
    {
      id:1,
      title:'推荐',
      icon:$r('app.media.tuijianblue'),
      selectIcon:$r('app.media.tuijianblack')
    },
    {
      id:2,
      title:'购物车',
      icon:$r('app.media.shoppingblue'),
      selectIcon:$r('app.media.shoppingblack')
    },
    {
      id:3,
      title:'我的',
      icon:$r('app.media.myblue'),
      selectIcon:$r('app.media.myblack')
    },
  ]
  //存储选择的下标
  @State currentIndex:number = 0
  @Builder
  tabBarItem(item:TabInterface){
    Column(){
      Image(item.id === this.currentIndex ? item.icon:item.selectIcon)
        .width(25)
        .height(25)
        .margin({top:5})

      Text(item.title)
        .fontSize(20)
        .fontColor(item.id === this.currentIndex ? '#1296db':'#2c2c2c')
        .margin({top:5})
    }.height(60)
    .width('100%')
  }

  build() {
    Row() {
      Tabs({index:$$this.currentIndex,controller:this.controller}){
        ForEach(this.tablist,(item:TabInterface)=>{
          TabContent(){
            if (0 ===this.tablist[this.currentIndex].id){
              HomePage()
            } else if(1 === this.tablist[this.currentIndex].id){
              choice()
            } else if(2 === this.tablist[this.currentIndex].id){
              Shoppingcar()
            } else  if(3=== this.tablist[this.currentIndex].id){
              MyPage()
            }
          }.tabBar(this.tabBarItem(item))
        })
      }.barPosition(BarPosition.End)
    }
    .height('100%')
  }

  onBackPress(): boolean | void {
    let nowtime=Date.now();
    if(nowtime-this.backTime<1000){
      const  mContext=getContext(this) as common.UIAbilityContext;
      mContext.terminateSelf()
    }else{
      this.backTime=nowtime;
      this.showtoast("再按一次将退出当前应用")
    }
    return true;
  }
}
网络请求工具类
import http from '@ohos.net.http';
import Logger from './Logger'
import Constants, { ContentType } from '../common/Constants';
import { connection } from '@kit.NetworkKit';
import { healthStore } from '@kit.HealthServiceKit';


export  function   httpRequestGet(url:string,params?:string){
  return httpRequest(url,http.RequestMethod.GET,params);
}
export  function   httpRequestPost(url:string,params?:string){

  return httpRequest(url,http.RequestMethod.POST,params);
}
function  httpRequest(url:string ,method:http.RequestMethod,params?:string):Promise<string>{
   let  httpRequest=http.createHttp();
   let responseResult=httpRequest.request(url,{
     method:method,
     readTimeout:Constants.HTTP_READ_TIMEOUT, //读取超时时间可选  默认 600000
     header:{
       'Content-Type':ContentType.JSON
     },
     connectTimeout:Constants.HTTP_READ_TIMEOUT, //连接超时时间  可选,默认为60000ms
     extraData:params // 请求参数

   });
   let getjson:string='';
   return responseResult.then((value:http.HttpResponse)=>{
      Logger.error("请求状态-- >"+value.responseCode);
      if(value.responseCode===200){
        Logger.error("请求成功");
        let result= `${value.result}`;
        Logger.error("请求返回数据",JSON.parse(result));
        getjson=result;
      }else{
        getjson='';
      }
     return getjson;
   }).catch(()=>{
      //httpRequest.off("headerReceive");
     httpRequest.destroy();
     return '';
   });
}
日志工具类


import hilog from '@ohos.hilog';

class Logger {
  private domain: number;
  private prefix: string;
  private format: string = '%{public}s, %{public}s';

  /**
   * constructor.
   *
   * @param Prefix Identifies the log tag.
   * @param domain Domain Indicates the service domain, which is a hexadecimal integer ranging from 0x0 to 0xFFFFF.
   */
  constructor(prefix: string = 'MyApp', domain: number = 0xFF00) {
    this.prefix = prefix;
    this.domain = domain;
  }

  debug(...args: string[]): void {
    hilog.debug(this.domain, this.prefix, this.format, args);
  }

  info(...args: string[]): void {
    hilog.info(this.domain, this.prefix, this.format, args);
  }

  warn(...args: string[]): void {
    hilog.warn(this.domain, this.prefix, this.format, args);
  }

  error(...args: string[]): void {
    hilog.error(this.domain, this.prefix, this.format, args);
  }
}

export default new Logger('HTTPS', 0xFF00)

其他的页面我这边就不展开讲了更多的可以关注我的课程 各位同学如果想学习更多的知识可以关注我的B站课程

最后总结:

鸿蒙的 ark ui 非常类似flutter 这种声明式ui 所有的布局都是代码编写的和传统的布局和逻辑分开有些区别 刚开始上手的时候可能不适应,慢慢就习惯了 还有一点 代码嵌套 这个其实可以把每个组件抽离出来就可以解决鸿蒙的ark ui 网络部分也是类似前端的http 请求 解析json和前端也比较像 也有面向对象编程的思想, 对前端和移动端同学来说也比较好理解和学习。 今天的文章就讲到这里有兴趣的 关注我B站教程 了解更多鸿蒙开发的知识 可以关注坚果派公众号 。 谢谢

课程地址

www.bilibili.com/cheese/play…

项目内容:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Canvas与诗词】要做一棵树,站成永恒

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>要做一棵树站成永恒</title><style type"text/css&quo…

电阻负载柜的工作原理是什么?

电阻负载柜是用于模拟电力系统中各种负载的设备&#xff0c;它可以模拟实际负载的各种特性&#xff0c;如阻性、感性和容性负载。电阻负载柜在电力系统、电气设备测试和维护等领域具有广泛的应用。其工作原理主要包括以下几个方面&#xff1a; 电阻负载柜的核心部分是电阻元件…

根据请求错误的状态码判断代理配置问题

SafeLine&#xff0c;中文名 “雷池”&#xff0c;是一款简单好用, 效果突出的 Web 应用防火墙(WAF)&#xff0c;可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注入、命…

后端——eclipse实现前端后端的交互(1)

1.创建Web Project 首先&#xff0c;为实现前端后端交互&#xff0c;要将HTML文件和Java后端文件放入eclipse。 右键—>New—>Project—>选择“Dynamic Web Project” 创建完成 这里我们会看到报了一个错&#xff1a; Description Resource Path Location Typ…

GC1262E替代APX9262S/茂达芯片在笔记本和显卡风散热风扇中的应用分享

随着移动计算和高性能图形处理技术的不断进步&#xff0c;笔记本电脑和显卡的散热需求日益增加。散热风扇作为关键组件&#xff0c;其控制芯片的选择对系统性能和用户体验有着直接影响。本文将探讨芯麦的GC1262E芯片如何替代APX9262S/茂达芯片&#xff0c;应用于笔记本和显卡的…

持续研发赋能,强达电路具备多项核心技术

深圳市强达电路股份有限公司&#xff08;以下简称&#xff1a;强达电路或公司&#xff09;深耕PCB行业二十年&#xff0c;主营业务为PCB的研发、生产和销售&#xff0c;是一家主要专注于中高端样板和小批量板产品的PCB企业。公司2004年创立于深圳&#xff0c;抓住国内早期缺少中…

面试宝典:揭秘50个大型模型核心问题精选

我精选50个大模型高频面试题&#xff0c;分享给大家 简述GPT和BERT的区别讲一下GPT系列模型是如何演进的&#xff1f;为什么现在的大模型大多是decoder-only的架构&#xff1f;讲一下生成式语言模型的工作机理哪些因素会导致LLM的偏见&#xff1f;LLM中的因果语言建模与掩码语…

【问题实战】Jmeter中jtl格式转换图片后如何分开展示各个性能指标?

【问题实战】Jmeter中jtl格式转换图片后如何分开展示各个性能指标&#xff1f; 遇到的问题解决方法查看修改效果 遇到的问题 JMeter测试计划中只设置了一个性能监控器jpgc - PerfMon Metrics Collector&#xff1b;在这个监控器中设置几个性能监控指标&#xff0c;比如CPU、Di…

电脑快速切换IP地址命令是什么?详解与实践

有时&#xff0c;出于安全考虑或测试需要&#xff0c;我们可能需要快速切换电脑的IP地址。虽然这一过程在初学者看来可能略显复杂&#xff0c;但通过简单的命令和步骤&#xff0c; 即使是普通用户也能轻松实现。本文将详细介绍在Windows系统中快速切换IP地址的几种方法&#xf…

无人自助超市系统小程序源码开发

随着科技的飞速发展和消费模式的转变&#xff0c;无人自助超市作为一种新兴的商业模式&#xff0c;以其便捷性、高效率以及对“体验式购物”的完美诠释&#xff0c;受到了广泛关注。本文renxb001将深入探讨无人自助超市系统小程序源码开发的核心环节和技术要点。 一、系统需求分…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第172章 使用C文件编写I2C client代码

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

什么是CSV?超详细+通俗易懂版!!

CSV&#xff0c;全称为Comma-Separated Values&#xff08;逗号分隔值&#xff09;&#xff0c;是一种常用的文本文件格式&#xff0c;用于存储表格数据&#xff0c;如电子表格或数据库。CSV文件由一行或多行文本组成&#xff0c;每行文本包含由逗号分隔的一个或多个字段。这些…

【S2-MLP】核心方法解读

abstract&#xff1a; 近年来&#xff0c;visual Transformer (ViT)及其后续工作抛弃了卷积&#xff0c;利用自关注运算&#xff0c;达到了与CNN相当甚至更高的准确率。最近&#xff0c;MLP-mixer放弃了卷积和自关注操作&#xff0c;提出了一个只包含MLP层的体系结构。为了实现…

漏洞挖掘 | 通过错误日志实现XXE外带

介绍 在最近的一个项目中&#xff0c;我发现了一个与 XML 外部实体&#xff08;XXE&#xff09;攻击相关的重大安全问题。 本文讲述了我在项目中发现并利用 XXE 漏洞的过程&#xff0c;特别是通过一种非传统的方式——利用 Java 异常在日志文件中输出攻击结果。 什么是XXE&a…

基于STM32的太阳跟踪系统设计

引言 本项目设计了一个基于STM32的太阳跟踪系统&#xff0c;通过光敏传感器阵列实时检测太阳位置&#xff0c;并控制电机驱动太阳能板或光伏板跟随太阳移动&#xff0c;从而最大化太阳能的利用效率。该系统使用双轴运动控制&#xff0c;实现水平和垂直方向的精确跟踪&#xff…

【Java】类型转换与类型提升

目录 1.类型转换 1.1自动类型转换&#xff08;隐式&#xff09; 1.2强制类型转化&#xff08;显式&#xff09; 2.类型提升 3.字符串类型 1.类型转换 Java作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有教严格的校验. 在Java中&#xff0c;当参与运算数…

[单master节点k8s部署]36.ingress 配置https(三)

目前我们的tomcat服务在浏览器上通过http来访问。为了提升安全性&#xff0c;我们将配置TLS secret 证书&#xff0c;从而可以进行https访问。 一对TLS密钥包括一个证书&#xff08;trs.crt&#xff09;和一个私钥&#xff0c;证书是公钥证书&#xff0c;用于加密数据并标识服…

气膜滑冰馆的现实意义:冰雪运动的全民普及—轻空间

气膜滑冰馆的出现不仅是城市发展中的一项基础设施建设&#xff0c;更代表着冰雪运动的逐步普及和全民健身理念的深入人心。在过去&#xff0c;许多地方的冰上运动资源相对匮乏&#xff0c;而如今&#xff0c;气膜滑冰馆通过其独特的优势&#xff0c;弥补了这一空白&#xff0c;…

Fleet Command

边缘计算 文章目录 前言一、边缘创造一个更快速、更智能、联系更紧密的世界二、优势边缘计算的优势1. 降低延迟2. 提高可靠性3. 降低成本4. 更广的覆盖范围三、创新借助 NVIDIA 实现边缘创新1. 企业边缘计算2. 工业边缘 AI3. 机器人和边缘 AI4. 构建面向 AI 时代的应用5. 边缘生…

C++——反向迭代器

1.回顾 template<class T> struct __list_iterator {typedef list_node<T> Node;typedef __list_iterator<T> self;Node* _node;__list_iterator(Node* node):_node(node){}self& operator(){_node _node->_next;return *this;}T& operator*(){…