CheckOut.dart

import 'package:flutter/material.dart';
import '../services/ScreenAdapter.dart';
import 'package:provider/provider.dart';
import '../provider/CheckOut.dart';
import '../services/UserServices.dart';
import '../services/SignServices.dart'; import '../config/Config.dart';
import 'package:dio/dio.dart'; import '../services/EventBus.dart'; class CheckOutPage extends StatefulWidget {
CheckOutPage({Key key}) : super(key: key); _CheckOutPageState createState() => _CheckOutPageState();
} class _CheckOutPageState extends State<CheckOutPage> { List _addressList=[];
@override
void initState() {
super.initState();
this._getDefaultAddress(); //监听广播
eventBus.on<CheckOutEvent>().listen((event) {
print(event.str);
this._getDefaultAddress();
});
} _getDefaultAddress() async {
List userinfo = await UserServices.getUserInfo(); // print('1234');
var tempJson = {
"uid": userinfo[]["_id"],
"salt": userinfo[]["salt"]
}; var sign = SignServices.getSign(tempJson); var api = '${Config.domain}api/oneAddressList?uid=${userinfo[0]["_id"]}&sign=${sign}';
var response = await Dio().get(api); print(response);
setState(() { this._addressList=response.data['result'];
}); } Widget _checkOutItem(item) {
return Row(
children: <Widget>[
Container(
width: ScreenAdapter.width(),
child: Image.network("${item["pic"]}", fit: BoxFit.cover),
),
Expanded(
flex: ,
child: Container(
padding: EdgeInsets.fromLTRB(, , , ),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("${item["title"]}", maxLines: ),
Text("${item["selectedAttr"]}", maxLines: ),
Stack(
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: Text("¥${item["price"]}",
style: TextStyle(color: Colors.red)),
),
Align(
alignment: Alignment.centerRight,
child: Text("x${item["count"]}"),
)
],
)
],
),
))
],
);
} @override
Widget build(BuildContext context) {
var checkOutProvider = Provider.of<CheckOut>(context); return Scaffold(
appBar: AppBar(
title: Text("结算"),
),
body: Stack(
children: <Widget>[
ListView(
children: <Widget>[
Container(
color: Colors.white,
child: Column(
children: <Widget>[
SizedBox(height: ),
this._addressList.length>?ListTile(
title: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("${this._addressList[0]["name"]} ${this._addressList[0]["phone"]}"),
SizedBox(height: ),
Text("${this._addressList[0]["address"]}"),
],
),
trailing: Icon(Icons.navigate_next),
onTap: () {
Navigator.pushNamed(context, '/addressList');
},
):ListTile(
leading: Icon(Icons.add_location),
title: Center(
child: Text("请添加收货地址"),
),
trailing: Icon(Icons.navigate_next),
onTap: () {
Navigator.pushNamed(context, '/addressAdd');
},
),
SizedBox(height: ),
],
),
),
SizedBox(height: ),
Container(
color: Colors.white,
padding: EdgeInsets.all(ScreenAdapter.width()),
child: Column(
children: checkOutProvider.checkOutListData.map((value) {
return Column(
children: <Widget>[_checkOutItem(value), Divider()],
);
}).toList()),
),
SizedBox(height: ),
Container(
color: Colors.white,
padding: EdgeInsets.all(ScreenAdapter.width()),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("商品总金额:¥100"),
Divider(),
Text("立减:¥5"),
Divider(),
Text("运费:¥0"),
],
),
)
],
),
Positioned(
bottom: ,
width: ScreenAdapter.width(),
height: ScreenAdapter.height(),
child: Container(
padding: EdgeInsets.all(),
width: ScreenAdapter.width(),
height: ScreenAdapter.height(),
decoration: BoxDecoration(
color: Colors.white,
border:
Border(top: BorderSide(width: , color: Colors.black26))),
child: Stack(
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: Text("总价:¥140", style: TextStyle(color: Colors.red)),
),
Align(
alignment: Alignment.centerRight,
child: RaisedButton(
child:
Text('立即下单', style: TextStyle(color: Colors.white)),
color: Colors.red,
onPressed: () {},
),
)
],
),
),
)
],
),
);
}
}

AddressList.dart

import 'package:flutter/material.dart';
import '../../services/ScreenAdapter.dart'; import '../../services/UserServices.dart';
import '../../services/SignServices.dart'; import '../../config/Config.dart';
import 'package:dio/dio.dart'; import '../../services/EventBus.dart'; class AddressListPage extends StatefulWidget {
AddressListPage({Key key}) : super(key: key); _AddressListPageState createState() => _AddressListPageState();
} class _AddressListPageState extends State<AddressListPage> {
List addressList = []; @override
void initState() {
super.initState();
this._getAddressList(); //监听增加收货地址的广播
eventBus.on<AddressEvent>().listen((event) {
// print(event.str);
this._getAddressList();
});
}
//监听页面销毁的事件
dispose(){
super.dispose();
eventBus.fire(new CheckOutEvent('改收货地址成功...'));
} //获取收货地址列表
_getAddressList() async {
//请求接口
List userinfo = await UserServices.getUserInfo(); var tempJson = {"uid": userinfo[]['_id'], "salt": userinfo[]["salt"]}; var sign = SignServices.getSign(tempJson); var api =
'${Config.domain}api/addressList?uid=${userinfo[0]['_id']}&sign=${sign}'; var response = await Dio().get(api);
// print(response.data["result"]); setState(() {
this.addressList = response.data["result"];
});
} //修改默认收货地址
_changeDefaultAddress(id) async{ List userinfo = await UserServices.getUserInfo(); var tempJson = {"uid": userinfo[]['_id'], "id":id,"salt": userinfo[]["salt"]}; var sign = SignServices.getSign(tempJson); var api =
'${Config.domain}api/changeDefaultAddress';
var response = await Dio().post(api,data:{
"uid": userinfo[]['_id'],
"id":id,
"sign":sign
});
Navigator.pop(context); } //删除收货地址 _delAddress(id) async{ List userinfo=await UserServices.getUserInfo();
var tempJson={
"uid":userinfo[]["_id"],
"id":id,
"salt":userinfo[]["salt"]
}; var sign=SignServices.getSign(tempJson); var api = '${Config.domain}api/deleteAddress';
var response = await Dio().post(api,data:{
"uid":userinfo[]["_id"],
"id":id,
"sign":sign
});
this._getAddressList(); //删除收货地址完成后重新获取列表 } //弹出框
_showDelAlertDialog(id) async{ var result= await showDialog(
barrierDismissible:false, //表示点击灰色背景的时候是否消失弹出框
context:context,
builder: (context){
return AlertDialog(
title: Text("提示信息!"),
content:Text("您确定要删除吗?") ,
actions: <Widget>[
FlatButton(
child: Text("取消"),
onPressed: (){
Navigator.pop(context);
},
),
FlatButton(
child: Text("确定"),
onPressed: () async{
//执行删除操作
this._delAddress(id);
Navigator.pop(context); },
)
], );
}
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("收货地址列表"),
),
body: Container(
child: Stack(
children: <Widget>[
ListView.builder(
itemCount: this.addressList.length,
itemBuilder: (context, index) {
if (this.addressList[index]["default_address"] == ) {
return Column(
children: <Widget>[
SizedBox(height: ),
ListTile(
leading: Icon(Icons.check, color: Colors.red),
title: InkWell(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"${this.addressList[index]["name"]} ${this.addressList[index]["phone"]}"),
SizedBox(height: ),
Text("${this.addressList[index]["address"]}"),
]), onTap: (){ this._changeDefaultAddress(this.addressList[index]["_id"]);
},
onLongPress: (){
this._showDelAlertDialog(this.addressList[index]["_id"]);
}, ),
trailing: IconButton(
icon:Icon(Icons.edit, color: Colors.blue),
onPressed: (){
Navigator.pushNamed(context, '/addressEdit',arguments: {
"id":this.addressList[index]["_id"],
"name":this.addressList[index]["name"],
"phone":this.addressList[index]["phone"],
"address":this.addressList[index]["address"],
});
},
),
),
Divider(height: ),
],
);
} else {
return Column(
children: <Widget>[
SizedBox(height: ),
ListTile(
title:InkWell(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"${this.addressList[index]["name"]} ${this.addressList[index]["phone"]}"),
SizedBox(height: ),
Text("${this.addressList[index]["address"]}"),
]),
onTap: (){
this._changeDefaultAddress(this.addressList[index]["_id"]); },
onLongPress: (){
this._showDelAlertDialog(this.addressList[index]["_id"]);
},
),
trailing: IconButton(
icon:Icon(Icons.edit, color: Colors.blue),
onPressed: (){
Navigator.pushNamed(context, '/addressEdit',arguments: {
"id":this.addressList[index]["_id"],
"name":this.addressList[index]["name"],
"phone":this.addressList[index]["phone"],
"address":this.addressList[index]["address"],
});
},
),
),
Divider(height: ),
],
);
}
},
),
Positioned(
bottom: ,
width: ScreenAdapter.width(),
height: ScreenAdapter.height(),
child: Container(
padding: EdgeInsets.all(),
width: ScreenAdapter.width(),
height: ScreenAdapter.height(),
decoration: BoxDecoration(
color: Colors.red,
border: Border(
top: BorderSide(width: , color: Colors.black26))),
child: InkWell(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(Icons.add, color: Colors.white),
Text("增加收货地址", style: TextStyle(color: Colors.white))
],
),
onTap: () {
Navigator.pushNamed(context, '/addressAdd');
},
),
),
)
],
),
));
}
}

EventBus.dart

import 'package:event_bus/event_bus.dart';

//Bus 初始化 

EventBus eventBus = EventBus();

//商品详情广播数据
class ProductContentEvent{
String str;
ProductContentEvent(String str){
this.str=str;
}
} //用户中心广播
class UserEvent{
String str;
UserEvent(String str){
this.str=str;
}
} //收货地址广播
class AddressEvent{
String str;
AddressEvent(String str){
this.str=str;
}
} //结算页面
class CheckOutEvent{
String str;
CheckOutEvent(String str){
this.str=str;
}
}

AddressAdd.dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../services/ScreenAdapter.dart'; import '../../widget/JdText.dart'; import '../../widget/JdButton.dart'; import 'package:city_pickers/city_pickers.dart'; import '../../services/UserServices.dart';
import '../../services/SignServices.dart'; import '../../config/Config.dart';
import 'package:dio/dio.dart'; import '../../services/EventBus.dart'; class AddressAddPage extends StatefulWidget {
AddressAddPage({Key key}) : super(key: key); _AddressAddPageState createState() => _AddressAddPageState();
} class _AddressAddPageState extends State<AddressAddPage> { String area='';
String name='';
String phone='';
String address=''; //监听页面销毁的事件
dispose(){
super.dispose();
eventBus.fire(new AddressEvent('增加成功...'));
eventBus.fire(new CheckOutEvent('改收货地址成功...'));
} @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("增加收货地址"),
),
body: Container(
padding: EdgeInsets.all(),
child: ListView(
children: <Widget>[
SizedBox(height: ),
JdText(
text: "收货人姓名",
onChanged: (value){
this.name=value;
},
),
SizedBox(height: ),
JdText(
text: "收货人电话",
onChanged: (value){
this.phone=value;
},
),
SizedBox(height: ),
Container(
padding: EdgeInsets.only(left: ),
height: ScreenAdapter.height(),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(width: , color: Colors.black12))),
child: InkWell(
child: Row(
children: <Widget>[
Icon(Icons.add_location),
this.area.length>?Text('${this.area}', style: TextStyle(color: Colors.black54)):Text('省/市/区', style: TextStyle(color: Colors.black54))
],
),
onTap: () async{
Result result = await CityPickers.showCityPicker(
context: context,
cancelWidget:
Text("取消", style: TextStyle(color: Colors.blue)),
confirmWidget:
Text("确定", style: TextStyle(color: Colors.blue))
); print(result);
setState(() {
this.area= "${result.provinceName}/${result.cityName}/${result.areaName}";
});
},
),
),
SizedBox(height: ),
JdText(
text: "详细地址",
maxLines: ,
height: ,
onChanged: (value){
this.address="${this.area} ${value}";
},
),
SizedBox(height: ),
SizedBox(height: ),
JdButton(text: "增加", color: Colors.red,cb: () async{ List userinfo=await UserServices.getUserInfo(); print(userinfo); // print('1234');
var tempJson={
"uid":userinfo[]["_id"],
"name":this.name,
"phone":this.phone,
"address":this.address,
"salt":userinfo[]["salt"]
}; var sign=SignServices.getSign(tempJson);
// print(sign); var api = '${Config.domain}api/addAddress';
var result = await Dio().post(api,data:{
"uid":userinfo[]["_id"],
"name":this.name,
"phone":this.phone,
"address":this.address,
"sign":sign
}); // if(result.data["success"]){ // }
Navigator.pop(context); })
],
),
));
}
}

42 Flutter仿京东商城项目 修改默认收货地址 显示默认收货地址的更多相关文章

  1. 01-02 Flutter仿京东商城项目 功能分析、底部导航Tab切换以及路由配置、架构搭建:(Flutter仿京东商城项目 首页布局以及不同终端屏幕适配方案)

    Flutter和Dart交流学习群:交流群:452892873 01Flutter仿京东商城项目 功能分析.底部导航Tab切换以及路由配置.架构搭建 02Flutter仿京东商城项目 首页布局以及不同 ...

  2. 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器

    加群452892873 下载对应39课文件,运行方法,建好项目,直接替换lib目录 pubspec.yaml city_pickers: ^ AddressAdd.dart import 'packa ...

  3. 14 Flutter仿京东商城项目 头部搜索导航布局 修改主题 修正ScreenAdapter类

    main.dart import 'package:flutter/material.dart'; import 'routes/router.dart'; void main() => run ...

  4. 16 Flutter仿京东商城项目 跳转到搜索页面实现搜索功能 以及搜索筛选

    ProductList.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.dart'; imp ...

  5. 07-08 Flutter仿京东商城项目 商品分类页面布局:Flutter仿京东商城项目 商品分类页面数据渲染

    Flutter实战(交流群:452892873) 本项目是一个实战项目,根据目录建文件,并复制从第一节到最新更新的文章,可以构成完整的一个请求后台数据的项目: CateModel.dart class ...

  6. 41 Flutter 仿京东商城项目签名验证 增加收货地址、显示收货地址 事件广播

    加群452892873 下载对应41课文件,运行方法,建好项目,直接替换lib目录 AddressAdd.dart import 'package:dio/dio.dart'; import 'pac ...

  7. 38 Flutter仿京东商城项目 渲染结算页面商品数据

    加群452892873 下载对应38课文件,运行方法,建好项目,直接替换lib目录 CartServices.dart import 'dart:convert'; import 'Storage.d ...

  8. 37 Flutter仿京东商城项目 结算页面布局

    加群452892873 下载对应34课文件,运行方法,建好项目,直接替换lib目录 CheckOut.dart import 'package:flutter/material.dart'; impo ...

  9. 36 Flutter仿京东商城项目 用户登录 退出登录 事件广播更新状态

    Login.dart import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.da ...

随机推荐

  1. Vue 中的Vue Router一级路由,二级路由,三级路由以及跳转

    今天编写了一下Vue中的路由 先用命令行新建一个空的项目,并且我知道要用路由,就下载了路由的相关依赖 vue init webpack demo5 完毕之后进入所在的项目 cd demo5 之后用vs ...

  2. Vue中的button事件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Android加载大图到内存如何避免内存溢出?

    加载大图怎么避免溢出实际做法就是对图像进行压缩,也是比较老的话题了,在最初做android时是经常会遇到的问题,而如今对于图片加载这一块都已经有很成熟稳定的三方库来弄它了,所以图片加载过大内存溢出的比 ...

  4. JDK源码那些事儿之PriorityBlockingQueue

    今天继续说一说阻塞队列的实现,今天的主角就是优先级阻塞队列PriorityBlockingQueue,从命名上看觉得应该是有序的,毕竟是优先级队列,那么实际上是什么情况,我们一起看下其内部实现,提前说 ...

  5. Mac+appium+iOS 环境搭建

    Mac+appium+iOS 环境搭建,需要用到的信息如下,参考搭建环境. 1.安装brew,安装介绍:https://jingyan.baidu.com/article/fec7a1e5ec3034 ...

  6. wsgiref 与 Django框架初识

    前戏: Web框架的本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,这样我们就可以自己实现Web框架 软件开发架构: c/s架构 客 ...

  7. SublimeText 括号插件 Bracket Highlighter高亮设置

    1. ctrl + shift + p,打开命令面板,输入install,在菜单中选择Package Control:Install Package如图 2. 步骤1后弹出的命令输入框中 输入:Bra ...

  8. git merge 及 git rebase的区别

    Git上合并代码有git merge 及 git rebase 两种方式. 前置知识点 Master分支:首先,代码库应该有一个.且仅有一个主分支.所有提供给用户使用的正式版本,都在这个主分支上发布. ...

  9. IDEA2018创建SpringBoot无法连接https://start.spring.io

    这是由于spring-boot需要访问https://start.spring.io外网,但是由于国内的局域网限制导致的. 解决办法: 进入到IDEA的setting 搜索 HTTP Proxy 选择 ...

  10. MAC OS系统替换homebrew使用阿里云的镜像源

    MAC OS系统替换homebrew使用阿里云的镜像源 2019-03-03 15:13:42 南通SEO 阅读数 2024更多 分类专栏: 解决方案   MAC OS系统替换homebrew使用阿里 ...