flutter 制作一个用户登录页面
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 制作一个用户登录页面的更多相关文章
- Android studio 开发一个用户登录界面
Android studio 开发一个用户登录界面 activity_main.xml <?xml version="1.0" encoding="utf-8&qu ...
- iOS开发一个用户登录注册模块需要解决的坑
最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...
- Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互
框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java model文件夹下的 Global ...
- Vue.js实现一个SPA登录页面的过程
技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路由变化时检查是否有登录状态(保存在cooki ...
- 怎么测试一个web登录页面
在以前的面试和同事面试交流的过程中,有多次被问到:“给你一个登录页面,上面有2个textbox,一个提交按钮,你将怎么测试”?或问,请针对这个页面设计30个以上的test case. 此题的考察目的: ...
- mxonline实战3,编写首页及用户登录页面1
对应github地址:首页和用户登陆1 一. 显示首页 1. 修改mxonline/setttings.py 在TEMPLATES代码块修改DIRS为 'DIRS': [os. ...
- Vue.js写一个SPA登录页面的过程
技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路由变化时检查是否有登录状态(保存在cooki ...
- JSP内置对象---用户登录页面(get和post)
Login.jsp 页面: <%@ page language="java" import="java.util.*" contentType=" ...
- Flask最强攻略 - 跟DragonFire学Flask - 第五篇 做一个用户登录之后查看学员信息的小例子
需求: 1. 用户名: oldboy 密码: oldboy123 2. 用户登录成功之后跳转到列表页面 3. 失败有消息提示,重新登录 4.点击学生名称之后,可以看到学生的详细信息 后端: from ...
随机推荐
- Django学习路32_创建管理员及内容补充+前面内容复习
创建管理员 python manage.py createsuperuser 数据库属性命名限制 1.不能是python的保留关键字 2.不允许使用连续的下划线,这是由django的查询方式决定的 ...
- GitHub 热点速览 Vol.30:那些提升效率的小工具们
摘要:虽然 GitHub 是一个学习技术的好去处,但是除了学习,它还集提高"搬砖"效率于一身.GitHub 上散落着各式各样的小工具,比如本周特推的 Adobe 开源的 React ...
- PHP 太空船运算符(组合比较符)
PHP 7 新增加的太空船运算符(组合比较符)用于比较两个表达式 $a 和 $b,如果 $a 小于.等于或大于 $b时,它分别返回-1.0或1. 实例 <?php // 整型比较 print( ...
- Python os.tempnam() 方法
概述 os.tempnam() 方法用于返回唯一的路径名用于创建临时文件.高佣联盟 www.cgewang.com 语法 tempnam()方法语法格式如下: os.tempnam(dir, pref ...
- HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
LINK:Cupid's Arrow 前置函数 atan2 返回一个向量的幅角.范围为[Pi,-Pi) 值得注意的是 返回的是 相对于x轴正半轴的辐角. 而判断一个点是否在一个多边形内 通常有三种方法 ...
- SAFe必备——提高团队敏捷性
规模化敏捷之于项目群,就像Scrum之于敏捷团队.为了创建高质量业务解决方案,企业需要提高自身能力,提升团队和技术敏捷性,实现真正的规模化敏捷. 敏捷发布火车 实现团队和技术敏捷性,首先需要敏捷团队围 ...
- 【学习笔记】ThreadLocal与引用类型相关知识点
0 写在前边 今天以 "TheadLocal 为什么会导致内存泄漏" 为题与朋友们讨论了一波,引出了一些原理性的内容,本文就这个问题作答,并扩展相关的知识点 1 ThreadLoc ...
- HTML5 plus是什么?
1.HTML5 plus 1.1 提出问题 如果大家使用过MUI框架,看到下面的代码就不会感到陌生. mui.plusReady(function(){ var self = plus.webview ...
- javascript Math对象 、Date对象笔记
Math对象 Math 是一个内置对象, 它具有数学常数和函数的属性和方法.不是一个函数对象. Math数学对象不是构造函数使用的时候不需要new来调用,可以直接使用里面的属性和方法 ...
- 【av68676164(p55-p58)】 Intel CPU和Linux内存管理
7.4.1 Intel CPU物理结构 https://www.cnblogs.com/megachen/p/9768115.html x86实模式 实模式 20位:1M内存空间 地址表示方式:段地址 ...