| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- import 'package:flutter/material.dart';
- import 'package:flutter/cupertino.dart';
- import 'package:provider/provider.dart';
- import 'package:bot_toast/bot_toast.dart';
- import 'package:twong/api/index.dart';
- import 'package:twong/utils/index.dart';
- import 'package:twong/config/style.dart';
- import 'package:twong/models/address.dart';
- import 'package:twong/widgets/app_bar.dart';
- import 'package:twong/providers/address.dart';
- import 'package:twong/widgets/address_selecter.dart';
- import 'package:twong/widgets/circle_check_box.dart';
- class EditAddressPage extends StatefulWidget {
- final Address data;
- EditAddressPage(this.data);
- @override
- State<StatefulWidget> createState() {
- return _EditAddressPageState();
- }
- }
- class _EditAddressPageState extends State<EditAddressPage> {
- bool _isAdd = true;
- Address _address = Address();
- TextEditingController _nameController = TextEditingController();
- TextEditingController _phoneController = TextEditingController();
- TextEditingController _detailController = TextEditingController();
- @override
- void initState() {
- super.initState();
- if(widget.data != null) {
- _isAdd = false;
- _address = widget.data;
- }
- }
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- backgroundColor: DColors.back,
- appBar: DAppBar(_isAdd ? "添加收货地址" : "编辑收货地址",
- actions: _isAdd ? null : [
- InkWell(
- onTap: _delClick,
- highlightColor: Colors.transparent,
- child: Container(
- margin: EdgeInsets.only(right: 12.px),
- alignment: Alignment.center,
- child: Text("删除地址"),
- ),
- )
- ]),
- body: SafeArea(
- child: Container(
- margin: EdgeInsets.all(12.px),
- child: ListView(
- physics: ClampingScrollPhysics(),
- children: [
- _buildName(),
- Divider(),
- _buildPhone(),
- Divider(),
- _buildAddress(),
- Divider(),
- _buildDetail(),
- Divider(),
- _buildDefault(),
- Divider(),
- FlatButton(
- color: DColors.Main,
- shape: StadiumBorder(),
- child: Text("立即保存", style: TextStyle(color: Colors.white)),
- onPressed: _saveClick,
- )
- ],
- ),
- ),
- ),
- );
- }
- _delClick() {
- Utils.loading();
- Network.inst.delAddress(_address.id).then((res) {
- Utils.closeLoading();
- Provider.of<AddressModel>(context, listen: false)
- .delete(_address.id);
- BotToast.showText(text: "删除成功");
- Navigator.pop(context);
- }).catchError((err) {
- Utils.closeLoading();
- Log.e(err);
- });
- }
- _saveClick () {
- _address.id = widget.data?.id;
- // _address.is_default = _default ? 1 : 0;
- _address.real_name = _nameController.text;
- _address.phone = _phoneController.text;
- _address.detail = _detailController.text;
- // var areas = _area.split(" ");
- // _address.province = areas[0];
- // _address.city = areas[1];
- // _address.district = areas[2];
- Utils.loading();
- Network.inst.editAddress(_address).then((value) {
- Utils.closeLoading();
- if(value["id"] != null) {
- _address.id = num.parse(value["id"].toString());
- }
- Provider.of<AddressModel>(context, listen: false)
- .update(_address.id, _address);
- BotToast.showText(text: "保存成功");
- Navigator.pop(context);
- }).catchError((err, stack) {
- Log.e(err.toString() + stack.toString());
- });
- }
- Widget _buildName() {
- if(_address.real_name != null) {
- _nameController.text = _address.real_name;
- }
- return Container(
- height: 38.px,
- child: Row(
- children: [
- Container(
- width: 64.px,
- child: Text("收货人"),
- ),
- Expanded(child: TextField(
- controller: _nameController,
- style: TextStyle(fontSize: 13.px),
- decoration: InputDecoration(
- border: InputBorder.none,
- hintText: "收货人"
- ),
- ))
- ],
- ));
- }
- Widget _buildPhone() {
- if(_address.phone != null) {
- _phoneController.text = _address.phone;
- }
- return Container(
- height: 38.px,
- child: Row(
- children: [
- Container(
- width: 64.px,
- child: Text("联系电话"),
- ),
- Expanded(child: TextField(
- controller: _phoneController,
- style: TextStyle(fontSize: 13.px),
- keyboardType: TextInputType.phone,
- decoration: InputDecoration(
- border: InputBorder.none,
- hintText: "联系电话"
- ),
- ))
- ],
- ));
- }
- Widget _buildAddress() {
- var _area = _address.province == null ? "所在区域" :
- "${_address.province} ${_address.city} ${_address.district}";
- return Container(
- height: 38.px,
- child: Row(
- children: [
- Container(
- width: 64.px,
- child: Text("所在区域"),
- ),
- Expanded(child: InkWell(
- highlightColor: Colors.transparent,
- onTap: _choiceAddressDialog,
- child: Text(_area, style: TextStyle(color: _address.province ==
- null ? Colors.grey : Colors.black)),
- )),
- Icon(Icons.chevron_right, color: Colors.grey)
- ],
- ));
- }
- void _choiceAddressDialog() {
- FocusScope.of(context).requestFocus(new FocusNode());
- showModalBottomSheet(
- context: context,
- shape: RoundedRectangleBorder(borderRadius: BorderRadius.only(
- topLeft: Radius.circular(45.px), topRight: Radius.circular(12.px)
- )),
- builder: (BuildContext context) {
- return AddressSelecter(
- onSelected: (province, city, county, code) {
- _address.province = province;
- _address.city = city;
- _address.district = county;
- _address.city_id = code;
- setState(() {});
- },
- title: '选择地址',
- selectedColor: Colors.red,
- unselectedColor: Colors.black);
- }
- );
- }
- Widget _buildDetail() {
- if(_address.detail != null) {
- _detailController.text = _address.detail;
- }
- return Container(
- height: 64.px,
- child: Row(
- children: [
- Container(
- width: 64.px,
- alignment: Alignment.topLeft,
- margin: EdgeInsets.only(top: 6.px),
- child: Text("详细地址"),
- ),
- Expanded(child: TextField(
- maxLines: 2,
- style: TextStyle(fontSize: 13.px),
- controller: _detailController,
- decoration: InputDecoration(
- border: InputBorder.none,
- hintText: "详细地址:如道路、门牌号、小区、楼栋号、单元室等",
- ),
- ))
- ],
- ));
- }
- Widget _buildDefault() {
- return Container(
- height: 38.px,
- child: Row(
- children: [
- Expanded(child: Text("设为默认收货地址")),
- Container(
- margin: EdgeInsets.only(right: 6.px),
- child: CircleCheckBox((value) {
- setState(() {
- _address.is_default = value ? 1 : 0;
- });
- }, initValue: _address.is_default == 1),
- )
- ],
- ));
- }
- }
|