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. PHP date_sunrise() 函数

    ------------恢复内容开始------------ 实例 返回葡萄牙里斯本今天的日出时间: <?php// Lisbon, Portugal:// Latitude: 38.4 Nor ...

  2. 4.26 ABC F I hate Matrix Construction 二进制拆位 构造 最大匹配

    LINK:I hate Matrix Construction 心情如题目名称. 主要说明一下构造的正确性. 准确来说这道题困扰我很久. 容易发现可以拆位构造. 这样题目中的条件也比较容易使用. 最后 ...

  3. P3250 [HNOI2016]网络

    LINK:网络 一棵树 每次添加一条路径 或者删除之前的一条路径 或询问除了不经过某个点之外剩下的最大值. 一个显然的思路 对于一条路径的权值我们直接把权值塞上去 标记永久化一下即可. 考虑如何求答案 ...

  4. RabbitMQ学习总结(2)-API的使用

      1. 引用依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-clie ...

  5. js如何从一个数组中随机取出n个不同且不重复的值

    前言 一位正在学习前端的菜鸟,虽菜,但还未放弃. 给大家画张图了解思路 以下是代码 function randomArr(arr,num){ let newArr = [];//创建一个新数组 for ...

  6. (转)Linux 下栈溢出问题分析解决 *** stack smashing detected *** XXXX terminated

    Linux 下栈溢出问题分析解决 *** stack smashing detected *** XXXX terminated 1.利用gdb 或者valgrind 定位到具体的代码 最近在Linu ...

  7. Java 通过Jna调用dll路径问题

    调试阶段 C++ dll --> window/system32C# dll --> C:\Program Files\Java\jdk1.8.0_171\bin [jdk bin] 打包 ...

  8. Python面向对象,站在更高的角度来思考

    开篇 面向过程编程和面向对象编程是两种基本的编程思想. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去 ...

  9. jQuery 综合练习ToDoList

    <div class="header"> <section> <label for="">ToDoList</labe ...

  10. Hello GCN

    参考链接: https://www.zhihu.com/question/54504471/answer/611222866 1 拉普拉斯矩阵 参考链接: http://bbs.cvmart.net/ ...