flutter 登录和退出登录_flutter - 实战:设计一个丑丑的登录界面

本文介绍了如何在Flutter中设计一个基础的登录界面,利用Scaffold组件构建,并探讨了Widget的嵌套结构。文章还预告了将对界面的逻辑层面进行优化提升。
摘要由CSDN通过智能技术生成

介绍

通过之前的学习,设计出一个简陋的登录界面。

Scaffold是一个强大的material组件,它集成了很丰富的子元素,使得我们可以很方便的设置方方面面的东西。

Widget用一种嵌套的方式组成界面,和html,xml类似,但是由于dart语言本身使用了{}组织代码块的方式(这种方式在一些用途的时候展现出了强大的效果使得代码的可读性提高)致使代码组织上显得累赘和冗余,影响代码阅读。

接下来将会对这个界面进行进一步提升(提升逻辑层面为主)。

效果展示:

5fd542e5d71bc21948c6182d106cb21f.png

2e5f0b3524c731f6e1a744cd4a94abd8.png

源码:

import 'package:flutter/material.dart';
import 'package:dim_chat_client/Adapt.dart';

class Login extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: Icon(Icons.account_circle),
        title: Text('DimChat'),
      ) ,
      body: Container(
        color: Theme.of(context).backgroundColor,
        child: LoginPage(),
      ),
      bottomSheet: Container(
        color: Theme.of(context).backgroundColor,
        child: buildBottom(),
      ),
    );
  }
}

class LoginPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(

      mainAxisSize: MainAxisSize.max,
      children: <Widget>[

        Image.asset(
          "assets/images/loginPic.jpeg",
          width: Adapt.px(750),
          height: Adapt.px(260),
          fit: BoxFit.cover,
        ),

        Container(height: Adapt.px(50),),

        Center(child: buildForm()),

        Container(height: Adapt.px(50),),

        Center(child: buildButton(),),

      ],
    );
  }

}

Widget buildBottom(){
  return new Row(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    mainAxisSize: MainAxisSize.max,
    children: <Widget>[
      FlatButton(
        child: Text("More"),
        onPressed: () => {},
      ),
      FlatButton(
        child: Text("Exit"),
        onPressed: () => {},
      ),
    ],
  );
}

Widget buildButton(){
  final buttonPadding = 50;
  return new Row(
    mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
      FlatButton(
        child: Text("立即注册"),
        onPressed: () => {},
      ),
      Padding(
        padding: EdgeInsets.only(left:Adapt.px(buttonPadding),right: Adapt.px(buttonPadding)),
        child: RaisedButton(
          child: Text("GO"),
          onPressed: () => {},
        ),
      ),
      FlatButton(
        child: Text("忘记密码"),
        onPressed: () => {},
      ),
    ],
  );
}

Widget buildForm() {
  return new Container(
    decoration:
    new BoxDecoration(
      borderRadius: BorderRadius.all(Radius.circular(8))
      , color: Colors.white
    ),
    width: Adapt.px(600),
    height: Adapt.px(260),

    child: new Form(
      child: new Column(
        mainAxisSize: MainAxisSize.max,
        children: <Widget>[

          Flexible(
            child: Padding(
              padding: EdgeInsets.all(Adapt.px(25)),
              child: new TextFormField(
                decoration: new InputDecoration(
                  icon: new Icon(Icons.email, color: Colors.black,),
                  hintText: "Email Address",
                  border: InputBorder.none
                ),
              ),
            ),
          ),

          Flexible(
            child: Padding(
              padding: EdgeInsets.all(Adapt.px(25)),
              child: new TextFormField(
                decoration: new InputDecoration(
                  icon: new Icon(Icons.lock, color: Colors.black,),
                  hintText: "Password",
                  border: InputBorder.none,
                  suffixIcon: new IconButton(icon: new Icon(
                    Icons.remove_red_eye, color: Colors.black,),
                  )
                ),
              ),
            ),
          ),

        ],
      ),
    ),
  );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值