flutter 制作一个用户登录页面

用户登录效果图如下:

登录页面如下:

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; void main() {
/* rendering调试 即开启布局线*/
debugPaintSizeEnabled = false;
runApp(new LoginMain());
} class LoginMain extends StatelessWidget{
@override
Widget build(BuildContext context){
return new MaterialApp(
theme: new ThemeData(
primarySwatch: Colors.blue
),
home: Scaffold(
body: new LoginHomePage(),
)
);
}
} class LoginHomePage extends StatefulWidget {
@override
_LoginHomePageState createState() {
// implement createState
return new _LoginHomePageState();
}
} class _LoginHomePageState extends State<LoginHomePage>{
@override
Widget build(BuildContext context){
return Stack( // 层叠布局
children: <Widget>[
Column( //布局类组件
mainAxisSize: MainAxisSize.max,//表示Row在主轴(水平)方向占用的空间,默认是MainAxisSize.max,表示尽可能多的占用水平方向的空间,
crossAxisAlignment: CrossAxisAlignment.center, // 表示子组件在纵轴方向的对齐方式,Row的高度等于子组件中最高的子元素高度
children: <Widget>[
/* TODO 1, 放置登录页面logo或文字等等 */
Container( //容器类组件(组合类,可以同时实现装饰、变换、限制的场景)
height: 150.0,
alignment: Alignment.center,//居中
padding: EdgeInsets.only(top: 20.0),
//padding: EdgeInsets.all(50.0), //设置设置具体某个方向的填充
color: const Color(0xfff2f2f2),
child: Text('购物', style: TextStyle(
color: const Color(0xffc8a675),
fontSize: 40.0,
fontFamily: "Courier"
)),
),
/* TODO 2, 文本输入框区域 */
Container(
color: Colors.white,
alignment: Alignment.center,
padding: EdgeInsets.only(left:30.0,right: 30.0),
margin: EdgeInsets.only(bottom: 10.0),
child: new Container(
child: buildForm(),
),
),
/* TODO 3, 忘记密码 */
Text('忘记密码?',style: TextStyle(
fontSize: 15.0,
decoration: TextDecoration.underline,
),)
],
)
],
);
} /* 定义两个container类 unameController和pwdController*/
TextEditingController nameController = new TextEditingController();
TextEditingController pwdController = new TextEditingController();
GlobalKey formKey = new GlobalKey<FormState>(); Widget buildForm(){
return Form(
/* globalKey, 用于后面获取FormState*/
key: formKey,
/* 开启自动效验 */
autovalidate: true,
child: Column(
children: <Widget>[
TextFormField(
autofocus: false,
keyboardType: TextInputType.text, //键盘输入类型(七种类型)
textInputAction: TextInputAction.next, //键盘动作按钮图标
controller: nameController, //container
maxLength: 12, //最大位数
maxLengthEnforced: true, //超出maxLength,禁止输入
decoration: InputDecoration(
labelText: "用户名",
hintText: "请输入用户名",
icon: Icon(Icons.person),
),
onChanged:(v){ //监听输入框值变化
/*print("$v");*/
},
/* 效验用户名 */
validator: (v){
return v.trim().length>5?null:'请输入用户名';
},
),
TextFormField(
autofocus: false,
controller: pwdController,
maxLength: 12,
maxLengthEnforced: true,
obscureText: true, //密码输入类型
decoration: InputDecoration(
labelText: "密码",
hintText: "请输入密码",
icon: Icon(Icons.lock)
),
validator: (v){
return v.trim().length>5?null:'请输入密码';
},
),
Padding(
padding: const EdgeInsets.only(top: 50.0),
child: Row(
children: <Widget>[
Expanded(
child: RaisedButton( //"漂浮"按钮
padding: EdgeInsets.all(12.0),
color: const Color(0xffc8a675),
textColor: Colors.white,
child: Text('登录',style: TextStyle(fontSize: 17)),
shape:RoundedRectangleBorder(
borderRadius: BorderRadius.circular(80.0) //设置圆角
),
onPressed: (){
if((formKey.currentState as FormState).validate()){
print('点击了');
print(nameController.text);
print(pwdController.text);
}
},
),
)
],
),
)
],
),
);
}
}

大家有啥问题,评论区见!!!

flutter 制作一个用户登录页面的更多相关文章

  1. Android studio 开发一个用户登录界面

    Android studio 开发一个用户登录界面 activity_main.xml <?xml version="1.0" encoding="utf-8&qu ...

  2. iOS开发一个用户登录注册模块需要解决的坑

    最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...

  3. Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互

    框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java   model文件夹下的 Global ...

  4. Vue.js实现一个SPA登录页面的过程

    技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路由变化时检查是否有登录状态(保存在cooki ...

  5. 怎么测试一个web登录页面

    在以前的面试和同事面试交流的过程中,有多次被问到:“给你一个登录页面,上面有2个textbox,一个提交按钮,你将怎么测试”?或问,请针对这个页面设计30个以上的test case. 此题的考察目的: ...

  6. mxonline实战3,编写首页及用户登录页面1

          对应github地址:首页和用户登陆1     一. 显示首页   1. 修改mxonline/setttings.py 在TEMPLATES代码块修改DIRS为 'DIRS': [os. ...

  7. Vue.js写一个SPA登录页面的过程

    技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路由变化时检查是否有登录状态(保存在cooki ...

  8. JSP内置对象---用户登录页面(get和post)

    Login.jsp 页面: <%@ page language="java" import="java.util.*" contentType=" ...

  9. Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子

    需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重新登录 4.点击学生名称之后,可以看到学生的详细信息 后端: from ...

随机推荐

  1. Oracle数据库出现[23000][2291] ORA-02291: integrity constraint (SIMTH.SYS_C005306) violated异常

    参考链接 这个异常发生在往中间表中插入数据时,这时出现异常是因为关联的某个表没有插入数据,所以给没有插入数据的关联表插入数据,再给中间表插入数据此时异常就会解决.

  2. Qt_Demo_4:汽车管理系统

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7AB?p=3 Github:https://github.com/zhengcixi/Qt_De ...

  3. PHP touch() 函数

    定义和用法 touch() 函数设置指定文件的访问和修改时间. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 touch(filename,time,atime) 参数 描述 ...

  4. PHP preg_grep() 函数

    preg_grep 函数用于返回匹配模式的数组条目.高佣联盟 www.cgewang.com 语法 array preg_grep ( string $pattern , array $input [ ...

  5. json-lib无法下载

    maven无法下载json-lib 配置一下这个 <classifier>jdk15</classifier> 因为远程提供了两个

  6. 【NOIP2013】火柴排队 题解(贪心+归并排序)

    前言:一道水题. ----------------------- 题目链接 题目大意:给出数列$a_i$和$b_i$,问使$\sum_{i=1}^n (a_i-b_i)^2$最小的最少操作次数. 首先 ...

  7. (恐怕是)写得最通俗易懂的一篇关于HashMap的文章——xx大佬这样说

    先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个有颜值却假装靠才华苟且的程序员. 本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我 ...

  8. Hexo小技巧(包括如何插入本地图片)

    我在研究如何在Hexo中引用本地图片时,看到官方文档对此问题已给出了解决方法,并亲测有效.当然,我并不满足于仅仅知道这一个技巧.在大致阅读过官方文档后,我总结了之前我个人并不知道的几个关于Hexo写博 ...

  9. 深入探究JVM之方法调用及Lambda表达式实现原理

    @ 目录 前言 正文 解析 分派 静态分派 动态分派 单分派和多分派 动态分派的实现 Lambda表达式的实现原理 MethodHandle 总结 前言 在最开始讲解JVM内存结构的时候有简单分析过方 ...

  10. proxy的实现(代理)

    29.proxy的实现 (代理) get方法 //定义一个对象personvar person = {"name":"张三”};//创建一个代理对象pro, 代理pers ...