我是靠谱客的博主 留胡子黑米,最近开发中收集的这篇文章主要介绍Flutter中撸一个漂亮的Material Design风格登录注册界面,带正则表达式校验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

先看图,没图还说个J8

代码实现如下:

import 'package:flutter/material.dart';
import 'package:flutter_wan/utils/common.dart';

class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => new _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {

  final _formKey = GlobalKey<FormState>();
  Color _eyeColor;
  bool _isClickEye = false;
  String _userName;
  String _pwd;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Login'),),
      body: Form(
        key: _formKey,
        child: ListView(
          padding: EdgeInsets.all(10),
          children: <Widget>[
            initTitle(),
            initHorizontalLine(),
            initLoginName(),
            SizedBox(height:30.0),
            initLoginPWD(),
            initForgetPwd(),
            SizedBox(height:50.0),
            initButton(),
            initRegister(),
            SizedBox(height:100.0),
            initBottomIcon()
          ],
        ),
      )

    );
  }

  Padding initTitle(){
    return Padding(
      padding: EdgeInsets.all(10),
      child: Text('Login View',style: TextStyle(fontSize: 30.0,color: Colors.deepOrange,fontWeight: FontWeight.bold),textAlign: TextAlign.center,),
    );
  }

  Padding initHorizontalLine(){
    return Padding(
      padding: EdgeInsets.only(top:10.0,bottom:10.0),
      child: Align(
        alignment: Alignment.bottomCenter,
        child: Container(
          color: Colors.deepOrange,
          width: 100,
          height: 2,
        ),
      )
    );
  }

  TextFormField initLoginName(){
    return TextFormField(
      onSaved: (String value) => _pwd = value,
      maxLength: 11,
      decoration: InputDecoration(
        labelText: '用户名'
      ),
      validator: (String value){
        var isPhone = RegExp("^1[3456789][0-9]{9}");
        if(!isPhone.hasMatch(value)){
          return '用户名格式不正确';
        }
      },

    );
  }

  TextFormField initLoginPWD(){
    return TextFormField(
      obscureText: _isClickEye,
      onSaved: (String value) => _userName = value,
      validator: (String value){
        if(value.isEmpty){
          return '密码不能为空';
        }
      },
      decoration: InputDecoration(
        labelText: '密码',
        suffixIcon: IconButton(
            icon: Icon(Icons.remove_red_eye,color: _eyeColor),
            onPressed:(){
              setState(() {
                _isClickEye = !_isClickEye;
                _eyeColor = _isClickEye ? Colors.grey: Colors.blue;
              });
            }
        ),
      ),
    );
  }

  Padding initForgetPwd(){
    return Padding(
      padding: EdgeInsets.only(top: 10.0),
      child: Align(
        alignment: Alignment.centerRight,
        child: GestureDetector(
          child:Text('忘记密码?'),
          onTap: (){
            CommonUtils.showToast(context, '忘记密码');
          },
        )
      ),
    );
  }

  Align initButton(){
    return Align(
      child: SizedBox(
        width: 300.0,
        height: 50.0,
        child: RaisedButton(
          child: Text('登录',style: TextStyle(color: Colors.white),),
          color: Colors.blueAccent,
          onPressed: (){
            //CommonUtils.showToast(context, '登录');
            if(_formKey.currentState.validate()){
              _formKey.currentState.save();
              CommonUtils.showToast(context, _userName+"----"+_pwd);
            }

          },
          shape: StadiumBorder(side: BorderSide(color: Colors.blueAccent)),
        ),
      ),
    );
  }

  Padding initRegister(){
    return Padding(
      padding: EdgeInsets.only(top: 10.0),
      child: GestureDetector(
        child:Align(
          alignment: Alignment.center,
          child: Text('没有账号?点击注册'),
        ),
        onTap: (){
          CommonUtils.showToast(context, '点击注册');
        },
      ),
    );
  }

  Align initBottomIcon(){

    return Align(
      alignment: Alignment.center,
      child: Container(
        child: Row(
          children: <Widget>[
            Expanded(
              flex: 1,
              child: IconButton(
                  icon: Icon(Icons.android,size: 50,color: Colors.blue),
                  onPressed: (){

                  }
              ),
            ),
            Expanded(
              flex: 1,
              child: IconButton(
                  icon: Icon(Icons.desktop_windows,size: 50,color: Colors.blue,),
                  onPressed: (){

                  }
              ),
            ),
            Expanded(
              flex: 1,
              child: IconButton(
                  icon: Icon(Icons.directions_bike,size: 50,color: Colors.blue),
                  onPressed: (){

                  }
              ),
            ),
          ],
        ),
      )
    );
  }
}

其中弹吐司,用到第三方库,在pubspec.yaml中添加

fluttertoast: ^2.1.1

工具类如下:

import 'package:fluttertoast/fluttertoast.dart';
import 'package:flutter/material.dart';
class CommonUtils{

  static Future showToast(BuildContext context,String msg){

    Fluttertoast.showToast(
      msg: msg,
      gravity: ToastGravity.CENTER,
      toastLength: Toast.LENGTH_SHORT,
      timeInSecForIos: 1,
    );
  }
}

最后

以上就是留胡子黑米为你收集整理的Flutter中撸一个漂亮的Material Design风格登录注册界面,带正则表达式校验的全部内容,希望文章能够帮你解决Flutter中撸一个漂亮的Material Design风格登录注册界面,带正则表达式校验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部