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.
226 lines
7.1 KiB
226 lines
7.1 KiB
/*
|
|
* ====================================================
|
|
* package :
|
|
* author : Created by nansi.
|
|
* time : 2019/6/20 4:57 PM
|
|
* remark :
|
|
* ====================================================
|
|
*/
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:recook/base/base_store_state.dart';
|
|
import 'package:recook/manager/user_manager.dart';
|
|
import 'package:recook/models/address_list_model.dart';
|
|
import 'package:recook/models/order_preview_model.dart';
|
|
import 'package:recook/pages/user/address/mvp/address_mvp_contact.dart';
|
|
import 'package:recook/pages/user/address/mvp/address_presenter_impl.dart';
|
|
import 'package:recook/pages/user/address/new_address_page.dart';
|
|
import 'package:recook/pages/user/address/widgets/item_my_address.dart';
|
|
import 'package:recook/utils/mvp.dart';
|
|
import 'package:recook/widgets/alert.dart';
|
|
import 'package:recook/widgets/custom_app_bar.dart';
|
|
import 'package:recook/constants/header.dart';
|
|
import 'package:recook/widgets/custom_image_button.dart';
|
|
import 'package:recook/widgets/mvp_list_view/mvp_list_view.dart';
|
|
import 'package:recook/widgets/mvp_list_view/mvp_list_view_contact.dart';
|
|
import 'package:recook/widgets/no_data_view.dart';
|
|
import 'package:recook/widgets/toast.dart';
|
|
|
|
class ReceivingAddressPage extends StatefulWidget {
|
|
final Map arguments;
|
|
|
|
const ReceivingAddressPage({Key key, this.arguments}) : super(key: key);
|
|
|
|
static setArguments({bool canBack = false, Addr addr}) {
|
|
return {"canBack": canBack, "originAddr": addr};
|
|
}
|
|
|
|
@override
|
|
State<StatefulWidget> createState() {
|
|
return _ReceivingAddressPageState();
|
|
}
|
|
}
|
|
|
|
class _ReceivingAddressPageState extends BaseStoreState<ReceivingAddressPage>
|
|
with MvpListViewDelegate<Address>
|
|
implements AddressViewI {
|
|
AddressPresenterImpl _presenterImpl;
|
|
MvpListViewController<Address> _controller = MvpListViewController();
|
|
Address _defaultAddress;
|
|
BuildContext _context;
|
|
bool _canBack;
|
|
Addr _originAddr;
|
|
bool _shouldUpdated = false;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_presenterImpl = AddressPresenterImpl();
|
|
_presenterImpl.attach(this);
|
|
if (widget.arguments != null) {
|
|
_canBack = widget.arguments["canBack"];
|
|
_originAddr = widget.arguments["originAddr"];
|
|
} else {
|
|
_canBack = false;
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget buildContext(BuildContext context, {store}) {
|
|
_context = context;
|
|
return Scaffold(
|
|
appBar: CustomAppBar(
|
|
title: "我的收货地址",
|
|
themeData: AppThemes.themeDataGrey.appBarTheme,
|
|
backEvent: () {
|
|
if (_shouldUpdated) {
|
|
if (_originAddr == null) {
|
|
// 这是预览订单没有地址时 跳转过来添加地址后,再返回时默认使用默认地址
|
|
Navigator.pop(globalContext, _defaultAddress);
|
|
return;
|
|
}
|
|
// 这是预览订单有地址时 跳转过来添加地址后,如果改变了地址信息,再返回是需要更新地址信息
|
|
Navigator.pop(globalContext,
|
|
Address(
|
|
_originAddr.addressId,
|
|
_originAddr.receiverName,
|
|
_originAddr.mobile,
|
|
_originAddr.province,
|
|
_originAddr.city,
|
|
_originAddr.district,
|
|
_originAddr.address,
|
|
1));
|
|
return;
|
|
}
|
|
pop();
|
|
},
|
|
actions: <Widget>[
|
|
CustomImageButton(
|
|
title: "添加收货地址",
|
|
padding: EdgeInsets.symmetric(horizontal: 10),
|
|
fontSize: ScreenAdapterUtils.setSp(14),
|
|
onPressed: () {
|
|
AppRouter.push(_context, RouteName.NEW_ADDRESS_PAGE).then((newAddress) {
|
|
if ((newAddress is Address)) {
|
|
if (_originAddr == null) {
|
|
_shouldUpdated = true;
|
|
}
|
|
GSDialog.of(context).showSuccess(context, "添加地址成功");
|
|
_presenterImpl.fetchAddressList(UserManager.instance.user.info.id);
|
|
}
|
|
});
|
|
},
|
|
)
|
|
],
|
|
),
|
|
backgroundColor: AppColor.tableViewGrayColor,
|
|
body: _listView(),
|
|
);
|
|
}
|
|
|
|
_listView() {
|
|
return MvpListView<Address>(
|
|
delegate: this,
|
|
controller: _controller,
|
|
itemBuilder: (_, index) {
|
|
return _itemBuilder(_, index);
|
|
},
|
|
refreshCallback: () {
|
|
_presenterImpl.fetchAddressList(UserManager.instance.user.info.id);
|
|
},
|
|
noDataView: NoDataView(
|
|
title: "您还没有添加地址",
|
|
height: 400,
|
|
),
|
|
);
|
|
}
|
|
|
|
_itemBuilder(BuildContext context, int index) {
|
|
Address address = _controller.getData()[index];
|
|
if (address.isDefault == 1) {
|
|
_defaultAddress = address;
|
|
}
|
|
return GestureDetector(
|
|
onTap: () {
|
|
if (!_canBack) return;
|
|
print("返回了-------");
|
|
Navigator.of(context).pop(address);
|
|
},
|
|
child: MyAddressItem(
|
|
addressModel: address,
|
|
deleteListener: () {
|
|
Alert.show(
|
|
context,
|
|
NormalTextDialog(
|
|
type: NormalTextDialogType.delete,
|
|
content: "确定删除该地址吗",
|
|
items: ["取消"],
|
|
deleteItem: "删除地址",
|
|
listener: (index) {
|
|
print(index);
|
|
Alert.dismiss(context);
|
|
},
|
|
deleteListener: () {
|
|
Alert.dismiss(context);
|
|
_presenterImpl.deleteAddress(UserManager.instance.user.info.id, address);
|
|
},
|
|
));
|
|
},
|
|
editListener: () {
|
|
AppRouter.push(_context, RouteName.NEW_ADDRESS_PAGE,
|
|
arguments: NewAddressPage.setArguments(address))
|
|
.then((newAddress) {
|
|
if (newAddress != null) {
|
|
// if ((newAddress as Address).id == _originAddr.addressId) {
|
|
_shouldUpdated = true;
|
|
// }
|
|
GSDialog.of(context).showSuccess(context, "更新地址成功");
|
|
_presenterImpl.fetchAddressList(UserManager.instance.user.info.id);
|
|
}
|
|
});
|
|
},
|
|
setDefaultListener: () {
|
|
if (_defaultAddress == address) return;
|
|
_presenterImpl.setDefaultAddress(UserManager.instance.user.info.id, address);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
MvpListViewPresenterI<Address, MvpView, MvpModel> getPresenter() {
|
|
return _presenterImpl;
|
|
}
|
|
|
|
@override
|
|
deleteSuccess(Address address) {
|
|
GSDialog.of(context).showSuccess(globalContext, "删除成功");
|
|
setState(() {
|
|
_controller.getData().remove(address);
|
|
});
|
|
}
|
|
|
|
@override
|
|
setDefaultSuccess(Address address) {
|
|
Toast.showInfo("设置成功");
|
|
print("设置默认-------");
|
|
address.isDefault = 1;
|
|
_defaultAddress.isDefault = 0;
|
|
_defaultAddress = address;
|
|
setState(() {});
|
|
}
|
|
|
|
@override
|
|
requestFail(String msg) {
|
|
GSDialog.of(context).dismiss(globalContext);
|
|
GSDialog.of(context).showError(globalContext, msg);
|
|
}
|
|
|
|
@override
|
|
void onAttach() {}
|
|
|
|
@override
|
|
void onDetach() {}
|
|
}
|