You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

245 lines
6.9 KiB

import 'package:flutter/cupertino.dart';
import 'package:flutter_pickers/pickers.dart';
import 'package:new_recook/models/home/address_model.dart';
import 'package:new_recook/utils/headers.dart';
import 'package:new_recook/widget/edit_tile.dart';
import 'package:new_recook/widget/recook_scaffold.dart';
import '../../utils/text_utils.dart';
class AddAddressPage extends StatefulWidget {
final AddressModel? addressModel;
const AddAddressPage({Key? key, this.addressModel}) : super(key: key);
@override
_AddAddressPageState createState() => _AddAddressPageState();
}
class _AddAddressPageState extends State<AddAddressPage> {
AddressModel _address = AddressModel.empty();
bool isDefault = false;
late StateSetter _addressStateSetter;
@override
void initState() {
super.initState();
if(widget.addressModel!=null){
_address = widget.addressModel!;
}
}
@override
Widget build(BuildContext context) {
return RecookScaffold(
title: '添加收货地址',
body: _body()
);
}
_body(){
return GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
},
child: Container(
child: MediaQuery.removePadding(
context: context,
removeTop: true,
removeBottom: true,
child: ListView(
children: <Widget>[
Container(
height: 10,
),
EditTile(
constraints: BoxConstraints.tight(Size(double.infinity, 45)),
title: "收货人",
value: _address.name,
hint: "请填写收货人姓名",
textChanged: (value) {
_address.name = value;
},
),
Container(
height: 3,
),
EditTile(
constraints: BoxConstraints.tight(Size(double.infinity, 45)),
title: "手机号码",
value: _address.mobile,
hint: "请填写收货人手机号码",
maxLength: 11,
textChanged: (value) {
_address.mobile = value;
},
),
Container(
height: 3,
),
_addressView(),
Container(
height: 3,
),
EditTile(
title: "详细地址",
hint: "街道门牌号等",
value: _address.address,
maxLength: 100,
maxLines: 3,
direction: Axis.vertical,
constraints: BoxConstraints(maxHeight: 100),
textChanged: (value) {
_address.address = value;
},
),
30.hb,
_defaultAddressTile(),
100.hb,
_saveButton(context)
],
),
),
),
);
}
_addressView() {
return GestureDetector(
onTap: () {
Pickers.showAddressPicker(context,
initProvince: _address.province??'',
initCity: _address.city??'',
initTown: _address.district??'',
onConfirm: (p,c,d){
_address.province = p;
_address.city = c;
_address.district = d;
_addressStateSetter(() {
});
}
);
},
child: StatefulBuilder(
builder: (BuildContext context, StateSetter setSta) {
_addressStateSetter = setSta;
return Container(
padding: EdgeInsets.symmetric(vertical: 12, horizontal: 15),
decoration: BoxDecoration(
color: Colors.white,
border: Border(
bottom: BorderSide(color: Colors.grey[200]!, width: 0.5))),
child: Row(
children: <Widget>[
Container(
width: 160.w,
child: Text(
"所在地区",
style:
TextStyle(fontSize: 30.sp, fontWeight: FontWeight.w300),
),
),
Expanded(
child: Text(
TextUtils.isEmpty(_address.province)
? "选择地址"
: "${_address.province}-${_address.city}${!TextUtils.isEmpty(_address.district) ? "-${_address.district}" : ""}",
textAlign: TextAlign.end,
style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w300),
)),
Icon(
Icons.navigate_next,
size: 32.w,
color: Colors.black,
)
],
),
);
},
),
);
}
Container _saveButton(BuildContext context) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 50.w),
child: GestureDetector(
onTap: () {
_saveAddress();
},
child: Container(
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.horizontal(
left: Radius.circular(40.w), right: Radius.circular(40.w)),
),
height: 80.w,
padding: EdgeInsets.symmetric(vertical: 8.w),
child: Text(
"保存并使用",
style: TextStyle(
color: Colors.white,
fontSize: 28.sp,
),
),
),
),
);
}
_saveAddress(){
Get.back(result: true);
}
_defaultAddressTile() {
return Container(
clipBehavior: Clip.antiAlias,
margin: EdgeInsets.all(20.w),
padding:
EdgeInsets.only(top: 24.w, bottom: 24.w, left: 24.w, right: 24.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(24.w)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
'设置为默认地址'.text.size(28.sp).color(Color(0xFF333333)).make(),
5.hb,
'提醒:每次下单会默认推荐使用该地址'
.text
.size(24.sp)
.color(Color(0xFFBBBBBB))
.make(),
],
),
Spacer(),
CupertinoSwitch(
value: isDefault,
onChanged: (value) {
if (value) {
isDefault = value;
_address.isDefault = 1;
print(1);
} else {
isDefault = value;
_address.isDefault = 0;
print(0);
}
setState(() {});
})
],
),
);
}
}