33Flutter仿京东商城项目 登录 注册相关页面布局
加群452892873 下载对应33课文件,运行方法,建好项目,直接替换lib目录
以下列出的是本课涉及的文件。
User.dart
import 'package:flutter/material.dart';
import 'package:flutter_jdshop/services/ScreenAdapter.dart'; class UserPage extends StatefulWidget {
UserPage({Key key}) : super(key: key); _UserPageState createState() => _UserPageState();
} class _UserPageState extends State<UserPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("用户中心"),
),
body: ListView(
children: <Widget>[
Container(
height: ScreenAdapter.height(),
width: double.infinity,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('images/user_bg.jpg'),
fit: BoxFit.cover)),
child: Row(
children: <Widget>[
Container(
margin: EdgeInsets.fromLTRB(, , , ),
child: ClipOval(
child: Image.asset(
'images/user.png',
fit: BoxFit.cover,
width: ScreenAdapter.width(),
height: ScreenAdapter.width(),
),
),
),
Expanded(
flex: ,
child: InkWell(
onTap: () {
Navigator.pushNamed(context, '/login');
},
child: Text('登录/注册', style: TextStyle(color: Colors.white)),
),
), // Expanded(
// flex: 1,
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.start,
// children: <Widget>[
// Text("用户名:123456789",
// style: TextStyle(
// color: Colors.white,
// fontSize: ScreenAdapter.size(32))),
// Text("普通会员",
// style: TextStyle(
// color: Colors.white,
// fontSize: ScreenAdapter.size(32)))
// ],
// ),
// )
],
),
),
ListTile(
leading: Icon(Icons.home, color: Colors.red), title: Text('首页')),
Divider(),
ListTile(leading: Icon(Icons.home), title: Text('首页')),
ListTile(leading: Icon(Icons.home), title: Text('首页')),
ListTile(leading: Icon(Icons.home), title: Text('首页'))
],
),
);
}
}
Login.dart
import 'package:flutter/material.dart';
import 'package:flutter_jdshop/services/ScreenAdapter.dart';
import 'package:flutter_jdshop/widget/JdButton.dart';
import '../widget/JdText.dart';
import '../widget/JdText.dart'; class LoginPage extends StatefulWidget {
LoginPage({Key key}) : super(key: key); _LoginPageState createState() => _LoginPageState();
} class _LoginPageState extends State<LoginPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.close),
onPressed: () {
Navigator.pop(context);
},
),
title: Text('登录页面'),
actions: <Widget>[
FlatButton(
child: Text('客服'),
onPressed: () {},
)
],
),
body: Container(
padding: EdgeInsets.all(ScreenAdapter.width()),
child: ListView(
children: <Widget>[
Center(
child: Container(
margin: EdgeInsets.only(top: ),
height: ScreenAdapter.width(),
width: ScreenAdapter.width(),
// child: Image.asset('images/login.png'),
child: Image.network(
'https://www.iting.com/images/flutter/list5.jpg'),
),
),
JdText(
text: "请输入用户名",
onChanged: (value) {
print(value);
},
),
SizedBox(height: ),
JdText(
text: "请输入密码",
password: true,
onChanged: (value) {
print(value);
},
),
SizedBox(height: ),
Container(
padding: EdgeInsets.all(ScreenAdapter.width()),
child: Stack(
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: Text("忘记密码"),
),
Align(
alignment: Alignment.centerRight,
child:InkWell(
onTap: (){
Navigator.pushNamed(context,'/RegisterFirst');
},
child: Text("新用户注册"),
),
)
],
),
),
SizedBox(height: ),
JdButton(
text: "登录",
color: Colors.red,
)
],
),
),
);
}
}
RegisterFirst.dart
import 'package:flutter/material.dart';
import 'package:flutter_jdshop/services/ScreenAdapter.dart';
import 'package:flutter_jdshop/widget/JdButton.dart';
import 'package:flutter_jdshop/widget/JdText.dart'; class RegisterFirstPage extends StatefulWidget {
RegisterFirstPage({Key key}) : super(key: key); _RegisterFirstPageState createState() => _RegisterFirstPageState();
} class _RegisterFirstPageState extends State<RegisterFirstPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('用户注册-第一步'),
),
body: Container(
padding: EdgeInsets.all(ScreenAdapter.width()),
child: ListView(
children: <Widget>[
SizedBox(height: ),
JdText(
text: "请输入密码",
password: true,
onChanged: (value) {
print(value);
},
),
SizedBox(height: ),
JdButton(
text: "下一步",
color: Colors.red,
cb: (){
Navigator.pushNamed(context,'/RegisterSecond');
},
)
],
),
),
);
}
}
RegisterSecond.dart
import 'package:flutter/material.dart';
import 'package:flutter_jdshop/services/ScreenAdapter.dart';
import 'package:flutter_jdshop/widget/JdButton.dart';
import 'package:flutter_jdshop/widget/JdText.dart';
class RegisterSecondPage extends StatefulWidget {
RegisterSecondPage({Key key}) : super(key: key); _RegisterSecondPageState createState() => _RegisterSecondPageState();
} class _RegisterSecondPageState extends State<RegisterSecondPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('用户注册-第二步'),
),
body: Container(
padding: EdgeInsets.all(ScreenAdapter.width()),
child: ListView(
children: <Widget>[
Container(
margin: EdgeInsets.all(),
child: Text('请输入xxx手机收到的验证码'),
),
Stack(
children: <Widget>[
JdText(
text: "请输入验证码",
password: true,
onChanged: (value) {
print(value);
},
),
Positioned(
right: ,
top: ,
child: RaisedButton(
child: Text('重新发送'),
onPressed: (){ },
),
)
],
),
SizedBox(height: ),
JdButton(
text: "下一步",
color: Colors.red,
cb: (){
Navigator.pushNamed(context,'/RegisterThird');
},
)
],
),
),
);
}
}
RegisterThird.dart
import 'package:flutter/material.dart';
import 'package:flutter_jdshop/widget/JdButton.dart';
import 'package:flutter_jdshop/widget/JdText.dart'; class RegisterThirdPage extends StatefulWidget {
RegisterThirdPage({Key key}) : super(key: key); _RegisterThirdPageState createState() => _RegisterThirdPageState();
} class _RegisterThirdPageState extends State<RegisterThirdPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('用户注册-第三步'),
),
body: Container(
padding: EdgeInsets.all(),
child: ListView(
children: <Widget>[
SizedBox(height: ),
JdText(
text: "请输入密码",
password: true,
onChanged: (value) {
print(value);
},
),
SizedBox(height: ),
JdText(
text: "请输入确认密码",
password: true,
onChanged: (value) {
print(value);
},
),
SizedBox(height: ),
JdButton(
text: "确认",
color: Colors.red,
cb: () {},
)
],
),
),
);
}
}
//
JdText.dart
import 'package:flutter/material.dart';
import 'package:flutter_jdshop/services/ScreenAdapter.dart';
class JdText extends StatelessWidget {
final String text;
final bool password;
final Object onChanged;
JdText({Key key,this.text="输入内容",this.password=false,this.onChanged=null}) : super(key: key); @override
Widget build(BuildContext context) {
return Container(
child: TextField(
obscureText: this.password,
decoration: InputDecoration(
hintText: this.text,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(),
borderSide: BorderSide.none
)
),
onChanged:this.onChanged,
),
height: ScreenAdapter.height(),
decoration: BoxDecoration(
// color: Color.fromRGBO(233,233,233,0.8),
// borderRadius: BorderRadius.circular(30)
border: Border(
bottom:BorderSide(
width: ,
color: Colors.black12
)
)
), );
}
}
JdButton.dart
import 'package:flutter/material.dart';
import '../services/ScreenAdapter.dart'; class JdButton extends StatelessWidget { final Color color;
final String text;
final Object cb;
JdButton({Key key,this.color=Colors.black,this.text="按钮",this.cb=null}) : super(key: key); @override
Widget build(BuildContext context) {
ScreenAdapter.init(context);
return InkWell(
onTap: this.cb,
child: Container(
margin: EdgeInsets.all(),
padding: EdgeInsets.all(),
height: ScreenAdapter.height(),
width: double.infinity,
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular()),
child: Center(
child: Text(
"${text}",
style: TextStyle(color: Colors.white),
),
),
),
);
}
}
router.dart
import 'package:flutter/material.dart';
import 'package:flutter_jdshop/pages/Login.dart';
import 'package:flutter_jdshop/pages/RegisterFirst.dart';
import 'package:flutter_jdshop/pages/RegisterSecond.dart';
import 'package:flutter_jdshop/pages/RegisterThird.dart';
import 'package:flutter_jdshop/pages/tabs/Cart.dart';
import '../pages/tabs/Tabs.dart'; import '../pages/Search.dart'; import '../pages/ProductList.dart'; import '../pages/ProductContent.dart'; //配置路由
final routes = {
'/': (context) => Tabs(),
'/login': (context) => LoginPage(),
'/RegisterFirst': (context) =>RegisterFirstPage(),
'/RegisterSecond': (context) =>RegisterSecondPage(),
'/RegisterThird': (context) =>RegisterThirdPage(),
'/search': (context) => SearchPage(),
'/cart': (context) => CartPage(),
'/productList': (context,{arguments}) => ProductListPage(arguments:arguments),
'/productContent': (context,{arguments}) => ProductContentPage(arguments:arguments),
}; //固定写法
var onGenerateRoute = (RouteSettings settings) {
// 统一处理
final String name = settings.name;
final Function pageContentBuilder = routes[name];
if (pageContentBuilder != null) {
if (settings.arguments != null) {
final Route route = MaterialPageRoute(
builder: (context) =>
pageContentBuilder(context, arguments: settings.arguments));
return route;
} else {
final Route route =
MaterialPageRoute(builder: (context) => pageContentBuilder(context));
return route;
}
}
};
pubspec.yaml
33Flutter仿京东商城项目 登录 注册相关页面布局的更多相关文章
- 34 Flutter仿京东商城项目 用户注册 注册流程 POST发送验证码 倒计时功能 验证验证码
加群452892873 下载对应34课文件,运行方法,建好项目,直接替换lib目录 以下列出的是本课涉及的文件. RegisterFirst.dart import 'package:flutter/ ...
- 01-02 Flutter仿京东商城项目 功能分析、底部导航Tab切换以及路由配置、架构搭建:(Flutter仿京东商城项目 首页布局以及不同终端屏幕适配方案)
Flutter和Dart交流学习群:交流群:452892873 01Flutter仿京东商城项目 功能分析.底部导航Tab切换以及路由配置.架构搭建 02Flutter仿京东商城项目 首页布局以及不同 ...
- ThinkPHP3.2开发仿京东商城项目实战视频教程
ThinkPHP3.2仿京东商城视频教程实战课程,ThinkPHP3.2开发大型商城项目实战视频 第一天 1.项目说明 2.时间插件.XSS过滤.在线编辑器使用 3.商品的删除 4.商品的修改完成-一 ...
- 36 Flutter仿京东商城项目 用户登录 退出登录 事件广播更新状态
Login.dart import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.da ...
- 32Flutter仿京东商城项目 用户中心页面布局
import 'package:flutter/material.dart'; import 'package:flutter_jdshop/services/ScreenAdapter.dart'; ...
- 07-08 Flutter仿京东商城项目 商品分类页面布局:Flutter仿京东商城项目 商品分类页面数据渲染
Flutter实战(交流群:452892873) 本项目是一个实战项目,根据目录建文件,并复制从第一节到最新更新的文章,可以构成完整的一个请求后台数据的项目: CateModel.dart class ...
- 42 Flutter仿京东商城项目 修改默认收货地址 显示默认收货地址
CheckOut.dart import 'package:flutter/material.dart'; import '../services/ScreenAdapter.dart'; impor ...
- 41 Flutter 仿京东商城项目签名验证 增加收货地址、显示收货地址 事件广播
加群452892873 下载对应41课文件,运行方法,建好项目,直接替换lib目录 AddressAdd.dart import 'package:dio/dio.dart'; import 'pac ...
- 40 Flutter仿京东商城项目签名验证原理、签名验证算法
加群452892873 下载对应40课文件,运行方法,建好项目,直接替换lib目录 pubspec.yaml crypto: ^ SignServices.dart import 'dart:conv ...
随机推荐
- Codeforces 750 E New Year and Old Subsequence
E. New Year and Old Subsequence 思路:线段树维护矩阵乘法. 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #p ...
- 读入 并查集 gcd/exgcd 高精度 快速幂
ios_base::sync_with_stdio(); cin.tie(); ], nxt[MAXM << ], Head[MAXN], ed = ; inline void added ...
- node中的npm的使用
1.node中npm的使用 nodejs软件 1.安装nodejs 自带了npm npm install Bootstrap 好比python自带pip pip3 install requests ...
- 没想到有一天我喜欢上java是因为微软,感谢啊
一直不喜欢java就是没有好的 ide, eclipse myeclipse idea 对于习惯visual studio的人 真的太好了 感谢微软 感谢visual studio code
- vueRouter history模式下 nginx配置
对于VUE的router[mode: history]模式(这里主要是为了去除链接上的"#")开发的时候,一般都不出问题.是因为开发时用的服务器为node,Dev环境中已配置好了, ...
- 一次vaccum导致的事故
1. 问题出现 晚上9点,现场报系统查询慢,运维查询zabbix后发现postgres最近几天的IOWait很大 2. 追踪问题 查询数据库,发现很多SQL堵住了 原因是真正创建index,导致表锁住 ...
- ajax向服务器发出get和post请求
假设有个网站A,它有一个简单的输入用户名的页面,界面上有两个输入框,第一个输入框包含在一个form表单里用来实现form提交,第二个输入框是单独的.没有包含在form里,下面就用这两个输入框来学习下j ...
- 洛谷P1972 HH的项链【树状数组】
题目:https://www.luogu.org/problemnew/show/P1972 题意:给定一个长度为n的序列,数字表示珠子的种类.m次查询每次询问给定区间内珠子的种类数. 思路:可以说是 ...
- [hdoj6483][莫队+线段树/ST]
A Sequence Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- python - scrapy 爬虫框架(创建, 持久化, 去重, 深度, cookie)
## scrapy 依赖 twisted - twisted 是一个基于事件循环的 异步非阻塞 框架/模块 ## 项目的创建 1. 创建 project scrapy startproject ...