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 ...
随机推荐
- SAP四代增强实现:销售订单复制项目文本时不需要显示文本框和回车
最近接收到一个业务需求,在SAP依据销售订单复制时,如果订单里面的项目有多个文本,系统就会显示复制的文本框处理,让用户选择是否复制,这个就让销售很不舒服,如果有几十个项目,每个项目有几个文本,那就就要 ...
- PHP convert_uuencode() 函数
实例 编码字符串: <?php$str = "Hello world!";echo convert_uuencode($str);?>高佣联盟 www.cgewang. ...
- 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用
一.什么是 RestTemplate? RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpCo ...
- 实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库
本文适合需要快速了解OpenGauss基本使用和操作的单机用户,可以短时间内完成安装体验.对于企业级生产使用或者需要部署多台服务器的,不适合本文. 因为业务需要,要在鲲鹏架构里安装单机版的OpenGa ...
- 教你不编程快速解析 JSON 数据
JSON 是一种轻量级的,不受语言约束的数据存储格式,大部分编程语言都可以解析它,并且对编程人员也十分友好.我们在进行通讯/数据交互时,非常经常用到 JSON 格式. 但是,我们在进行数据存储的时候, ...
- IntelliJ IDEA 控制台输出中文乱码
IntelliJ IDEA 控制台输出中文乱码部分如图所示: 解决方法一: 1.打开IntelliJ IDEA本地安装目录中bin文件夹下的idea.exe.vmoptions和idea64.exe. ...
- ssm框架中applicationContext.xml文件中配置别名
在applicationContext.xml中配置如下: 通过以下property标签中给定name属性value属性及对应的值,来将domain包下所有实体类设置别名. 在xxxDao.xml中 ...
- SeaweedFS在.net core下的实践方案
一直对分布式的文件储存系统很感兴趣,最开始关注淘宝的TFS(Taobao File System),好像搁浅了,官方地址无法访问,github上面,各种编译问题,无意间发现了SeaweedFS 链接s ...
- Semantic Monocular SLAM for Highly Dynamic Environments面向高动态环境的语义单目SLAM
一.摘要 当前单目SLAM系统能够实时稳定地在静态环境中运行,但是由于缺乏明显的动态异常处理能力,在动态场景变化与运动中往往会失败.作者为解决高度动态环境中的问题,提出一种语义单目SLAM架构,结合基 ...
- Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile (default-testCompile) on project docker_springcloud_demo: Fatal error compiling: 无效的标记: -parameters -> [Help 1]
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile (def ...