鸿蒙期末大作业——甜点店铺APP(一)登录页面的实现

一、整体页面的构思与构建

       我计划创建一个甜点商铺app项目,首先包含一个登陆页面——用户输入用户名和密码则可以进行下一个页面的跳转,否则弹出弹窗提示“用户名或密码不能为空”。登录成功后跳转到下一个页面——首页,同级页面下还有其余页面,分别是:精选页面以及我的页面。

       我计划首页大致分为三个模块,最顶部采用轮播模式向用户展示该店一部分的特色产品图片,中间部分是一个导航组件,第三部分是列表模块,里面存放一些图片。

       精选页面里面存放所有的分好类的商品,利用一级二级列表联动方式,对商品数据进行懒加载。

       我的页面存放我的登录信息,里面包括我的头像以及昵称,以及一个列表组件,里面包含一些用户可以选择的操作,如:是否开启推送通知、清除缓存等。还有一个退出登录的按钮,点击按钮,可以跳转到登录页面。

二、登录页面的构思

登录页面的设计
  • 确定页面主要整体布局,整体是一个Column布局
    • 首先先添加图片login.png,并设计其占比屏幕比例以及外边距。
    • 下方再接着利用Text组件设置文本‘欢迎登录’,设置其字体大小、粗体以及外边距。
    • 再接着下方设置两个TextInput输入框组件,用于输入用户名和密码。定义公共样式函数存放这两个输入框相同的样式,以便简化代码、提高代码的复用性。并且为这两个输入框分别添加触发事件onChange,当输入框输入的值发生变化时,触发回调,在控制台Log输出输入用户名和密码。
    • 再接着下方是一个Row布局包含的两个Text文本组件,设置在水平方向的布局为FlexAlign.SpaceAround,组件与边框的距离相等,组件与组件的距离是组件与边框的距离的两倍。
    • 再接着下方是一个Button登录按钮,设置按钮形状以及按压态显示效果。添加点击事件onClick,如果输入的用户名或者密码为空,则用到promptAction.showToast弹窗提示'用户名或者密码不能为空',否则点击按钮则进行页面的跳转,跳转到首页。

    • 接着利用一个row布局,包含一个Text组件—'其它登录方式',设置在水平方向的布局为FlexAlign.Center,使文本在中间显示。

    • 最后下方是一个row布局包含三个按钮,定义一个数组,用来存储三个登录方式按钮的内容。

 整体布局如下:

三、代码的实现

LoginPage.ets

//导入页面路由模块
import router from '@ohos.router';

//弹窗
import promptAction from '@ohos.promptAction';

@Entry
@Component
struct  LoginPage{
  @State message: string = '欢迎登录'
  @State user:string = ''      //用户名
  @State password:string = ''  //密码
  private otherData:Array<string> =[  //三个按钮
    "微信","QQ","手机号"        //可以通过数据进行操作,对代码改动小,方便下面添加按钮
  ]

  build() {
    Row() {
      Column() {
        //LOGO
        Image($r('app.media.login'))
          .width('50%')
          .margin({bottom:20})
        //欢迎登录
        Text(this.message)
          .fontSize(45)
          .fontWeight(FontWeight.Bold)
          .margin({bottom:10})

        //用户名和密码
        TextInput({placeholder:'请输入用户名'})
          .inputStyle()      //引用公共样式函数
          .onChange(data=>{  //输入值发生变化时,触发回调,data代表输入的内容
            this.user = data
            console.info('user:'+data)
          })

        TextInput({placeholder:'请输入密码'})
          .type(InputType.Password)     //输入框类型
          .inputStyle()       //引用公共样式函数
          .onChange(data=>{   //输入值发生变化时,触发回调,data代表输入的内容
            this.password = data
            console.info('password:'+data)
          })

        //文字提示
        Row(){
          Text('短信验证码登录')
            .fontColor(Color.Blue)
          Text('忘记密码')
            .fontColor(Color.Blue)
        }
        .justifyContent(FlexAlign.SpaceAround)
        .width('100%')
        .margin(10)

        //登录按钮
        Button('登录',{type:ButtonType.Capsule,stateEffect:true})
          .width('30%')
          .margin(20)
          .onClick(()=>{
            //进行判断,若用户名或者密码为空
            if(this.user==''||this.password==''){
              //不能跳转,同时给出弹窗提示
              promptAction.showToast({
                message:'用户名或者密码不能为空',  //显示的文本信息
                duration:2000,           //弹窗持续时间
                bottom:50                //设置弹窗边框距离屏幕底部的位置
              })
            }else{
              //路由跳转,跳转到下一个页面
              router.pushUrl({
                url:'pages/MainPage'
              }).catch((error:Error)=>{
                //错误提示
              })
            }
          })

        //其它
        Row(){
          Text('其它登录方式')
            .fontColor(Color.Blue)
        }
        .justifyContent(FlexAlign.Center)
        .width('100%')

        //三个按钮
        Row(){
          ForEach(this.otherData,(item:string)=>{
            Button(item)
          })
        }
        .justifyContent(FlexAlign.SpaceAround)
        .width('100%')
        .margin(20)

      }
      .width('100%')
    }
    .height('100%')
  }
}

//添加公共的样式函数
//@Extend装饰器:扩展组件样式
//@Extend(组件描述名称) function 样式名称(){}
@Extend(TextInput) function inputStyle(){
  .placeholderColor(Color.Pink) //设置颜色
  .maxLength(8)     //设置最大长度
  .margin({bottom:10})
}

 MainPage.ets

@Entry
@Component

struct Main{
  @State message:string = '首页'

  build(){
    Row(){
      Column(){
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

四 、登录页面的效果

登录页面

跳转到首页 

下一期我们将进行首页页面的进一步修改。 

 五、遇到的问题

  当设计登录页面时,不管输入还是不输入用户名或者密码,都能跳转到首页,怎么改进?

        解决方案:定义user和password等两个状态变量,在按钮组件Button的点击事件中进行判断:如果用户名为空或者密码为空,则设置弹窗提示——'用户名或者密码不能为空';否则进行页面跳转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值