import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/address.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class EditAddressPage extends StatefulWidget { final Map arguments; EditAddressPage({this.arguments}); @override State createState() { return _EditAddressPage(); } } class _EditAddressPage extends State { TextEditingController nameController = TextEditingController(); TextEditingController mobileController = TextEditingController(); TextEditingController addressController = TextEditingController(); TextEditingController houseNumberController = TextEditingController(); ApiService apiService; @override void initState() { super.initState(); SharedPreferences.getInstance().then((value) => { apiService = ApiService(Dio(), context: context, token: value.getString('token')), queryAddress(), }); } Address preAddress; queryAddress() async { if (widget.arguments == null) return; preAddress = Address.fromJson(widget.arguments); nameController.text = preAddress.username; mobileController.text = preAddress.phone; addressController.text = "${preAddress.province}${preAddress.city}${preAddress.area}"; houseNumberController.text = preAddress.address; setState(() {}); } @override Widget build(BuildContext context) { return Scaffold( appBar: MyAppBar( title: S.of(context).bianjidizhi, titleColor: Colors.black, leadingColor: Colors.black, background: Colors.white, ), body: Container( child: Column( children: [ Container( margin: EdgeInsets.only(bottom: 26.h), padding: EdgeInsets.only(top: 16.h, bottom: 16.h), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withAlpha(12), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ), ], borderRadius: BorderRadius.only( bottomLeft: Radius.circular(8), bottomRight: Radius.circular(8), ), ), child: Column( children: [ editItem( S.of(context).xingming, preAddress != null ? preAddress.username : "", S.of(context).qingtianxiexingming, nameController, false), editItem( S.of(context).dianhua, preAddress != null ? preAddress.phone : "", S.of(context).qingtianxieshoujihao, mobileController, false), InkWell( onTap: () { toMap(); }, child: editItem( S.of(context).dizhi, preAddress != null ? preAddress.address : "", S.of(context).shouhuodizhi, addressController, true), ), editItem( S.of(context).xiangxidizhi, preAddress != null ? preAddress.address : "", S.of(context).menpaihao, houseNumberController, false), ], ), ), InkWell( onTap: () { saveOrUpdate(); }, child: Container( color: Color(0xFF32A060), width: MediaQuery.of(context).size.width, padding: EdgeInsets.all(16), alignment: Alignment.center, child: Text( S.of(context).baocun, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 16.sp, color: Colors.white, ), ), ), ), ], ), ), ); } Map addressMap; toMap() async { Navigator.of(context).pushNamed('/router/address_map_page').then( (value) => { if (value != null) { addressMap = value, addressController.text = "${(value as Map)['province']}${(value as Map)['city']}${(value as Map)['area']}", if (preAddress != null) { preAddress.province = addressMap['province'], preAddress.city = addressMap['city'], preAddress.area = addressMap['area'], }, houseNumberController.text = "${(value as Map)['address']}", } // setState(() {}) }, ); } saveOrUpdate() async { String name = nameController.text; String mobile = mobileController.text; String city = addressController.text; String address = houseNumberController.text; if (name == null || name == "") { SmartDialog.showToast(S.of(context).shouhuorenxingming, alignment: Alignment.center); return; } if (mobile == null || mobile == "") { SmartDialog.showToast(S.of(context).shouhuorenshoujihao, alignment: Alignment.center); return; } if (city == null || city == "") { SmartDialog.showToast(S.of(context).shurushouhuorendizhi, alignment: Alignment.center); return; } if (address == null || address == "") { SmartDialog.showToast(S.of(context).shouhuorenxiangxidizhi, alignment: Alignment.center); return; } BaseData baseData; if (preAddress == null) { baseData = await apiService.addAddress({ "address": address, "area": addressMap != null ? addressMap['area'] : "", "city": addressMap != null ? addressMap['city'] : "", "cityInfo": "", "isDefault": true, "latitude": addressMap != null ? addressMap['latitude'] : 0, "longitude": addressMap != null ? addressMap['longitude'] : 0, "phone": mobile, "province": addressMap != null ? addressMap['province'] : "", "tag": "", "username": name }); } else { baseData = await apiService.updateAddress({ "address": address, "area": preAddress != null ? preAddress.area : "", "city": preAddress != null ? preAddress.city : "", "province": preAddress != null ? preAddress.province : "", "cityInfo": "", "isDefault": true, "latitude": preAddress != null ? preAddress.latitude : 0, "longitude": preAddress != null ? preAddress.longitude : 0, "phone": mobile, "tag": "", "id": preAddress != null ? preAddress.id : 0, "username": name }); } if (baseData != null && baseData.isSuccess) { SmartDialog.showToast(preAddress == null ? S.of(context).baocunchenggong : S.of(context).xiugaichenggong, alignment: Alignment.center); Navigator.of(context).pop(); } } Widget editItem(start, text, hide, controller, isClick) { return Container( margin: EdgeInsets.symmetric(horizontal: 16, vertical: 5), child: Row( children: [ Expanded( child: Text( start, style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.bold, color: Color(0xFF353535), ), ), flex: 1, ), Expanded( child: TextField( controller: controller, enabled: start != "地址", keyboardType: start == "电话" ? TextInputType.phone : TextInputType.text, decoration: InputDecoration( border: InputBorder.none, hintText: hide, hintStyle: TextStyle( color: Color(0xFFA29E9E), ), contentPadding: EdgeInsets.all(0), ), ), flex: 3, ), if (isClick) Icon( Icons.keyboard_arrow_right, color: Colors.black, size: 24, ) else SizedBox( width: 24, ) ], ), ); } }