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 ...
随机推荐
- 那些年拿过的shell之springboot jolokia rce
日穿扫描扫到一个spring boot actuator 可以看到有jolokia这个端点,再看下jolokia/list,存在type=MBeanFactory 关键字 可以使用jolokia-re ...
- Pandas 复习2
import pandas as pd import numpy as np food_info = pd.read_csv('food_info.csv') 1.处理缺失值(可使用平均数,众数填充) ...
- PHP addcslashes() 函数
实例 在字符 "W" 前添加反斜杠: <?php 高佣联盟 www.cgewang.com$str = addcslashes("Hello World!" ...
- MyBatis-Plus使用(3)-条件构造器
说明: 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中 以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true 以下出现的泛型P ...
- 【Java并发知识点汇总】
1,ArrayList 为什么线程不安全(https://www.jianshu.com/p/41be1efe5d65)
- dos下mybatis自动生成代码
今天来介绍下怎么用mybatis-gennerator插件自动生成mybatis所需要的dao.bean.mapper xml文件,这样我们可以节省一部分精力,把精力放在业务逻辑上. 之前看过很多文章 ...
- python基础语法和实战练习
(一)Python基础学习 Num01:python的基本数据类型 ①字符串:可进行拼接和截取 ②数字:int,float,complex(复数) 涉及到格式转换:int(x)转换为整数,float( ...
- Springboot2.x整合logback slf4j
Springboot项目的pom里引入的parent <parent> <groupId>org.springframework.boot</groupId> &l ...
- SCOI2020迷惑记
睡了个好觉还是很困但没咋吃饭就出门了. 到了之后随便跟认得到的人扯了两句就进去了. 结果让我们站在外面等... 然后通知说不能自带水和吃的那我这个中午没吃饭的咋整啊. 马上啃了半块巧克力就进了考场,然 ...
- java 多态一
一 多态的概述 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学 生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个事物的多种形态.如Studen ...