import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:dating_touchme_app/components/page_appbar.dart'; import 'package:dating_touchme_app/controller/mine/edit_info_controller.dart'; import 'package:dating_touchme_app/extension/ex_widget.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/model/home/marriage_data.dart'; import 'package:dating_touchme_app/model/mine/address_data.dart'; import 'package:dating_touchme_app/model/mine/occupation_data.dart'; import 'package:dating_touchme_app/pages/home/user_information_page.dart'; import 'package:dating_touchme_app/pages/mine/signature_page.dart'; import 'package:dating_touchme_app/pages/mine/tag_setting_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; class EditInfoPage extends StatefulWidget { const EditInfoPage({super.key}); @override State createState() => _EditInfoPageState(); } class _EditInfoPageState extends State { @override void initState() { super.initState(); // 确保 HomeController 已注册 if (!Get.isRegistered()) { Get.put(EditInfoController()); } } void _showAvatarPopup(EditInfoController controller, int type){ Navigator.of(Get.context!).push( TDSlidePopupRoute( slideTransitionFrom: SlideTransitionFrom.bottom, builder: (context) { return Container( height: type == 1 ? 490 : 176, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( topLeft: Radius.circular(12.0), topRight: Radius.circular(12.0), ), ), child: Column( children: [ if(type == 1)const SizedBox(height: 4), if(type == 1)CachedNetworkImage(imageUrl: 'https://dating-agency-prod.oss-cn-shenzhen.aliyuncs.com/1A437A945667.jpg', width: 375, height: 314), if(type == 1)const TDDivider(), ClipRRect( borderRadius: BorderRadius.only( topLeft: Radius.circular(type == 1 ? 0 : 12.0), topRight: Radius.circular(type == 1 ? 0 : 12.0), ), child: TDCell( arrow: false, titleWidget: Center( child: Text('拍照', style: TextStyle(fontSize: 16.w, color: const Color.fromRGBO(51, 51, 51, 1))), ), style: TDCellStyle( padding: EdgeInsets.all(TDTheme.of(context).spacer16), clickBackgroundColor: TDTheme.of(context).bgColorContainerHover, cardBorderRadius: BorderRadius.only( topLeft: Radius.circular(type == 1 ? 0 : 12.0), topRight: Radius.circular(type == 1 ? 0 : 12.0), ) ), onClick: (cell) async{ Navigator.pop(context); await controller.handleCameraCapture(type); }, ), ), const TDDivider(), TDCell( arrow: false, titleWidget: Center( child: Text('从相册选择'), ), onClick: (cell) async{ Navigator.pop(context); if(type == 1 || 9 - controller.imgList.length == 1){ await controller.handleGallerySelection(type); } else { if(controller.imgList.length >= 9){ SmartDialog.showToast('超出数量限制,请先删除再尝试上传'); return; } await controller.handleMultiGallerySelection(type); } }, ), Expanded( child: Container( color: Color(0xFFF3F3F3), ), ), TDCell( arrow: false, titleWidget: Center( child: Text('取消'), ), onClick: (cell){ Navigator.pop(context); }, ), ], ), ); }), ); } // 显示日期选择器 Future _showDatePicker(EditInfoController controller) async { // 计算最小和最大日期 final now = DateTime.now(); final maxDate = DateTime(now.year - 18); // 最小18岁 final minDate = DateTime(now.year - 80); // 最大80岁 // 初始选择日期(默认为25岁) DateTime initialDate = DateTime(now.year - 25); if (controller.birthday.value.isNotEmpty) { try { final List dateParts = controller.birthday.value.split('-'); if (dateParts.length == 3) { initialDate = DateTime( int.parse(dateParts[0]), int.parse(dateParts[1]), int.parse(dateParts[2]), ); // 确保初始日期在有效范围内 if (initialDate.isBefore(minDate)) initialDate = minDate; if (initialDate.isAfter(maxDate)) initialDate = maxDate; } } catch (e) { print('解析日期失败: $e'); } } // 临时存储选择的日期 DateTime? selectedDate = initialDate; await showCupertinoModalPopup( context: Get.context!, builder: (BuildContext context) { return Container( height: 300, color: CupertinoColors.white, child: Column( children: [ // 头部按钮区域 Container( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ CupertinoButton( child: const Text('取消'), onPressed: () { Navigator.pop(context); }, ), CupertinoButton( child: const Text('确定'), onPressed: () { Navigator.pop(context); if (selectedDate != null) { // 格式化为YYYY-MM-DD final formattedDate = '${selectedDate!.year}-' '${selectedDate!.month.toString().padLeft(2, '0')}-' '${selectedDate!.day.toString().padLeft(2, '0')}'; controller.selectBirthday(formattedDate); } }, ), ], ), ), // 日期选择器 Expanded( child: CupertinoDatePicker( mode: CupertinoDatePickerMode.date, initialDateTime: initialDate, minimumDate: minDate, maximumDate: maxDate, onDateTimeChanged: (DateTime dateTime) { selectedDate = dateTime; }, use24hFormat: true, backgroundColor: CupertinoColors.white, ), ), ], ), ); }, ); } @override Widget build(BuildContext context) { return GetX( init: EditInfoController(), builder: (controller) { return Scaffold( appBar: PageAppbar(title: "编辑资料", right: Container( margin: EdgeInsets.only(right: 14.w), child: InkWell( onTap: (){ controller.goPreview(); }, child: Text( "预览", style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(144, 144, 144, 1), ), ), ), ),), body: SingleChildScrollView( child: Column( children: [ if(false) Row( children: [ Expanded( child: InkWell( onTap: (){ controller.menuActive.value = 1; setState(() { }); }, child: Container( height: 49.w, decoration: BoxDecoration( border: Border( bottom: BorderSide( width: 1, color: controller.menuActive.value == 1 ? const Color.fromRGBO(117, 98, 249, 1) : const Color.fromRGBO(242, 242, 242, 1)) ) ), child: Center( child: Text( "编辑", style: TextStyle( fontSize: 13.w, color: controller.menuActive.value == 1 ? const Color.fromRGBO(117, 98, 249, 1) : const Color.fromRGBO(144, 144, 144, 1) ), ), ), ), ), ), Expanded( child: InkWell( onTap: (){ controller.menuActive.value = 2; setState(() { }); }, child: Container( height: 49.w, decoration: BoxDecoration( border: Border( bottom: BorderSide( width: 1, color: controller.menuActive.value == 2 ? const Color.fromRGBO(117, 98, 249, 1) : const Color.fromRGBO(242, 242, 242, 1)) ) ), child: Center( child: Text( "预览", style: TextStyle( fontSize: 13.w, color: controller.menuActive.value == 2 ? const Color.fromRGBO(117, 98, 249, 1) : const Color.fromRGBO(144, 144, 144, 1) ), ), ), ), ), ), ], ), if(controller.menuActive.value == 1) ...[ SizedBox(height: 26.w,), Stack( children: [ SizedBox( child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(85.w)), child: controller.avatarLocalPath.value != "" ? Image.file( File(controller.avatarLocalPath.value), width: 85.w, height: 85.w, ) : (controller.userData.value?.profilePhoto?.isNotEmpty ?? false) ? CachedNetworkImage( imageUrl: "${controller.userData.value?.profilePhoto ?? ""}?x-oss-process=image/format,webp/resize,w_170", width: 85.w, height: 85.w, fit: BoxFit.cover, ) : Image.asset( Assets.imagesUserAvatar, width: 85.w, height: 85.w, ), ), ), Positioned( right: 8.w, bottom: 1.w, child: Image.asset( Assets.imagesEditAvatar, width: 17.w, height: 17.w, ), ) ], ).onTap(() { if(controller.userData.value?.auditProfilePhoto != null){ SmartDialog.showToast('当前头像正在审核中,请勿重复提交'); return; } _showAvatarPopup(controller, 1); }), SizedBox(height: 20.w,), Container( width: 375.w, padding: EdgeInsets.only( left: 14.w, right: 20.w ), child: Column( children: [ Row( children: [ Text( "个人相册", style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(144, 144, 144, 1) ), ) ], ), SizedBox(height: 5.w,), Container( width: 340.w, margin: EdgeInsets.only(bottom: 35.w), child: Wrap( spacing: 5.w, runSpacing: 5.w, children: [ ...controller.imgList.asMap().entries.map((entry){ return Stack( children: [ ClipRRect( borderRadius: BorderRadius.all(Radius.circular(9.w)), child: CachedNetworkImage( imageUrl: "${entry.value}?x-oss-process=image/format,webp/resize,w_140", width: 70.w, height: 70.w, fit: BoxFit.cover, ), ), if(controller.userData.value!.photoList!.isNotEmpty && controller.userData.value!.photoList!.length >= entry.key && (controller.userData.value!.photoList![entry.key].auditStatus == 1 || controller.userData.value!.photoList![entry.key].auditStatus == null))Positioned( right: 5.w, top: 5.w, child: Container( width: 20.w, height: 20.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(20.w)), color: const Color.fromRGBO(0, 0, 0, .3) ), child: Icon( Icons.close, size: 20.w, ), ).onTap((){ controller.imgList.removeAt(entry.key); }), ), if(controller.userData.value!.photoList!.isNotEmpty && controller.userData.value!.photoList!.length >= entry.key && controller.userData.value!.photoList![entry.key].auditStatus == 0)Positioned( top: 0, right: 0, child: Container( width: 33.w, height: 17.w, decoration: BoxDecoration( borderRadius: BorderRadius.only( topRight: Radius.circular(9.w), bottomLeft: Radius.circular(9.w) ), color: const Color.fromRGBO(0, 0, 0, .4) ), child: Center( child: Text( "审核中", style: TextStyle( fontSize: 8.w, color: Colors.white, fontWeight: FontWeight.w500 ), ), ), ), ) ], ); }), Container( width: 70.w, height: 70.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(9.w)), border: Border.all(width: 1, color: const Color.fromRGBO(224, 224, 224, 1)) ), child: Center( child: Icon( Icons.add, size: 15.w, color: const Color.fromRGBO(144, 144, 144, 1), ), ), ).onTap(() { _showAvatarPopup(controller, 2); }) ], ), ), Row( children: [ Text( "基本信息", style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(144, 144, 144, 1) ), ) ], ), SizedBox(height: 2.w,), SetItem(label: "昵称", child: Text( controller.userData.value?.nickName ?? "", style: TextStyle( fontSize: 13.w, fontWeight: FontWeight.w500 ), ), hideArrow: true,), Container( margin: EdgeInsets.only(bottom: 3.w), decoration: BoxDecoration( border: Border( bottom: BorderSide(width: 1, color: const Color.fromRGBO(245, 245, 245, 1)) ) ), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ RichText( text: TextSpan( children: [ TextSpan( text: "性别", style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(51, 51, 51, 1), fontWeight: FontWeight.w500 ) ), TextSpan( text: "*", style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(224, 54, 54, 1), fontWeight: FontWeight.w500 ) ), ] ), ), Row( children: [ Text( "${controller.userData.value?.genderCode == 0 ? "男" : "女"}", style: TextStyle( fontSize: 13.w, fontWeight: FontWeight.w500, color: const Color.fromRGBO(51, 51, 51, 1) ), ), SizedBox(width: 15.w,), Image.asset( controller.userData.value?.genderCode == 0 ? Assets.imagesMale : Assets.imagesFemale, width: 13.w, height: 13.w, color: const Color.fromRGBO(218, 218, 218, 1) ) ], ) ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ RichText( text: TextSpan( children: [ TextSpan( text: "生日", style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(51, 51, 51, 1), fontWeight: FontWeight.w500 ) ), TextSpan( text: "*", style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(224, 54, 54, 1), fontWeight: FontWeight.w500 ) ), ] ), ), Row( children: [ Text( "${controller.birthday.value != "" ? controller.birthday.value : (controller.userData.value?.birthDate != null && controller.userData.value?.birthDate != "") ? controller.userData.value?.birthDate : "请选择"}", style: TextStyle( fontSize: 13.w, fontWeight: (controller.birthday.value != "" || (controller.userData.value?.birthDate != null && controller.userData.value?.birthDate != "")) ? FontWeight.w500 : null, color: (controller.birthday.value != "" || (controller.userData.value?.birthDate != null && controller.userData.value?.birthDate != "")) ? const Color.fromRGBO(51, 51, 51, 1) : const Color.fromRGBO(191, 191, 191, 1) ), ), SizedBox(width: 15.w,), Icon( Icons.keyboard_arrow_right, size: 13.w, color: Color.fromRGBO(191, 191, 191, (controller.userData.value?.identityCard != null && controller.userData.value?.identityCard != "") ? 0 : 1) ) ], ) ], ).onTap((){ if(controller.userData.value?.identityCard != null && controller.userData.value?.identityCard != ""){ return; } _showDatePicker(controller); }), ], ), ), InkWell( onTap: () { TDPicker.showMultiPicker(context, title: '', initialIndexes: [30], onConfirm: (selected) { print(selected); print(controller.heightList[selected[0]]); controller.heightSelect.value = selected[0]; setState(() { }); Navigator.of(context).pop(); controller.saveData(); }, data: [controller.heightList]); }, child: SetItem(label: "身高", child: Text( controller.heightSelect.value != -1 ? controller.heightList[controller.heightSelect.value] ?? "" : "请选择", style: TextStyle( fontSize: 13.w, color: controller.heightSelect.value != -1 ? const Color.fromRGBO(51, 51, 51, 1) :const Color.fromRGBO(191, 191, 191, 1), fontWeight: controller.heightSelect.value != -1 ? FontWeight.w500 : null ), ),), ), InkWell( onTap: () { TDPicker.showMultiLinkedPicker(context, title: '', onConfirm: (selected) { print(selected); controller.location.value = selected.join("-"); Map province = address.firstWhere( (e) => e["label"] == selected[0], orElse: () => {}, ); if(province.isNotEmpty){ Map city = province["children"].firstWhere( (e) => e["label"] == selected[1], orElse: () => {}, ); if(city.isNotEmpty){ Map district = city["children"].firstWhere( (e) => e["label"] == selected[2], orElse: () => {}, ); if(city.isNotEmpty){ controller.locationValue.value = [province["value"], city["value"], district["value"]]; print([province["value"], city["value"], district["value"]]); } } } setState(() { }); Navigator.of(context).pop(); controller.saveData(); }, data: controller.areaShowData, columnNum: 3, initialData:[]); }, child: SetItem(label: "所在地", child: Text( controller.location.value != "" ? controller.location.value :"请选择", style: TextStyle( fontSize: 13.w, color: controller.location.value != "" ? const Color.fromRGBO(51, 51, 51, 1) : const Color.fromRGBO(191, 191, 191, 1), fontWeight: controller.location.value != "" ? FontWeight.w500 : null, ), ),), ), InkWell( onTap: () { TDPicker.showMultiLinkedPicker(context, title: '', onConfirm: (selected) { print(selected); controller.homeLocation.value = selected.join("-"); Map province = address.firstWhere( (e) => e["label"] == selected[0], orElse: () => {}, ); if(province.isNotEmpty){ Map city = province["children"].firstWhere( (e) => e["label"] == selected[1], orElse: () => {}, ); controller.homeLocationValue.value = [province["value"], city["value"]]; print([province["value"], city["value"]]); } setState(() { }); Navigator.of(context).pop(); controller.saveData(); }, data: controller.areaShowData, columnNum: 2, initialData:[]); }, child: SetItem(label: "家乡", child: Text( controller.homeLocation.value != "" ? controller.homeLocation.value :"请选择", style: TextStyle( fontSize: 13.w, color: controller.homeLocation.value != "" ? const Color.fromRGBO(51, 51, 51, 1) : const Color.fromRGBO(191, 191, 191, 1), fontWeight: controller.homeLocation.value != "" ? FontWeight.w500 : null, ), )), ), InkWell( onTap: () { TDPicker.showMultiPicker(context, title: '', onConfirm: (selected) { print(selected); print(controller.educationList[selected[0]]); controller.educationSelect.value = selected[0]; setState(() { }); Navigator.of(context).pop(); controller.saveData(); }, data: [controller.educationList.map((e) => e.desc ?? "").toList()]); }, child: SetItem(label: "学历", child: Text( controller.educationSelect.value != -1 ? controller.educationList[controller.educationSelect.value].desc ?? "" : "请选择", style: TextStyle( fontSize: 13.w, color: controller.educationSelect.value != -1 ? const Color.fromRGBO(51, 51, 51, 1) :const Color.fromRGBO(191, 191, 191, 1), fontWeight: controller.educationSelect.value != -1 ? FontWeight.w500 : null ), ),), ), InkWell( onTap: () { TDPicker.showMultiLinkedPicker(context, title: '', onConfirm: (selected) { print(selected); controller.occupation.value = selected.join("-"); OccupationData first = controller.occupationList.firstWhere( (e) => e.industry == selected[0], ); OccupationList second = first.occupationList?.firstWhere( (e) => e.occupation == selected[1] ) ?? OccupationList(); print([first.industryCode, second.occupationCode]); controller.occupationValue.value = [first.industryCode, second.occupationCode]; setState(() { }); Navigator.of(context).pop(); controller.saveData(); }, data: controller.occupationShowData, columnNum: 2, initialData:[]); }, child: SetItem(label: "职业", child: Text( controller.occupation.value != "" ? controller.occupation.value : "请选择", style: TextStyle( fontSize: 13.w, color: controller.occupation.value != "" ? const Color.fromRGBO(51, 51, 51, 1) : const Color.fromRGBO(191, 191, 191, 1), fontWeight: controller.occupation.value != "" ? FontWeight.w500 : null ), ),), ), InkWell( onTap: () { TDPicker.showMultiPicker(context, title: '', onConfirm: (selected) { print(selected); print(controller.incomeList[selected[0]]); controller.incomeSelect.value = selected[0]; setState(() { }); Navigator.of(context).pop(); controller.saveData(); }, data: [controller.incomeList.map((e) => e.desc ?? "").toList()]); }, child: SetItem(label: "月收入", child: Text( controller.incomeSelect.value != -1 ? controller.incomeList[controller.incomeSelect.value].desc ?? "" :"请选择", style: TextStyle( fontSize: 13.w, color: controller.incomeSelect.value != -1 ? const Color.fromRGBO(51, 51, 51, 1) : const Color.fromRGBO(191, 191, 191, 1), fontWeight: controller.incomeSelect.value != -1 ? FontWeight.w500 : null ), ),), ), // SetItem(label: "公司", showRequired: false,), InkWell( onTap: () { TDPicker.showMultiPicker(context, title: '', onConfirm: (selected) { print(selected); print(controller.maritalList[selected[0]]); controller.maritalSelect.value = selected[0]; setState(() { }); Navigator.of(context).pop(); controller.saveData(); }, data: [controller.maritalList.map((e) => e.desc ?? "").toList()]); }, child: SetItem(label: "婚姻状况", child: Text( controller.maritalSelect.value != -1 ? controller.maritalList[controller.maritalSelect.value].desc ?? "" :"请选择", style: TextStyle( fontSize: 13.w, color: controller.maritalSelect.value != -1 ? const Color.fromRGBO(51, 51, 51, 1) : const Color.fromRGBO(191, 191, 191, 1), fontWeight: controller.maritalSelect.value != -1 ? FontWeight.w500 : null ), ),), ), InkWell( onTap: () { TDPicker.showMultiPicker(context, title: '', onConfirm: (selected) { print(selected); print(controller.propertyList[selected[0]]); controller.propertySelect.value = selected[0]; setState(() { }); Navigator.of(context).pop(); controller.saveData(); }, data: [controller.propertyList.map((e) => e.desc ?? "").toList()]); }, child: SetItem(label: "有无房产", child: Text( controller.propertySelect.value != -1 ? controller.propertyList[controller.propertySelect.value].desc ?? "" :"请选择", style: TextStyle( fontSize: 13.w, color: controller.propertySelect.value != -1 ? const Color.fromRGBO(51, 51, 51, 1) : const Color.fromRGBO(191, 191, 191, 1), fontWeight: controller.propertySelect.value != -1 ? FontWeight.w500 : null ), ),), ), if(false) Container( margin: EdgeInsets.symmetric( vertical: 30.w ), child: Container( width: 255.w, height: 42.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(42.w)), color: const Color.fromRGBO(117, 98, 249, 1) ), child: Center( child: Text( "保存修改", style: TextStyle( fontSize: 14.w, color: Colors.white, fontWeight: FontWeight.w500 ), ), ), ).onTap((){ controller.saveData(); }), ) ], ), ), ], if(false && controller.menuActive.value == 2) ...[ Stack( children: [ controller.imgList.length > 0 ? Image.network( controller.imgList[controller.nowSelect.value], width: 375.w, height: 384.w, fit: BoxFit.cover, ) : controller.avatarLocalPath.value != "" ? Image.file( File(controller.avatarLocalPath.value), width: 375.w, height: 384.w, ) : (controller.userData.value?.profilePhoto?.isNotEmpty ?? false) ? Image.network( "${controller.userData.value?.profilePhoto ?? ""}", width: 375.w, height: 384.w, ) : Image.asset( Assets.imagesUserAvatar, width: 375.w, height: 384.w, ), SingleChildScrollView( child: Container( padding: EdgeInsets.only(top: 361.w), child: Container( height: 812.h - 361.w - 49.w - MediaQuery.of(context).padding.top - 54.w, width: 375.w, padding: EdgeInsets.only( top: 31.w, left: 15.w, right: 12.w ), decoration: BoxDecoration( borderRadius: BorderRadius.vertical( top: Radius.circular(23.w) ), color: Colors.white ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ Text( controller.userData.value?.nickName ?? "", style: TextStyle( fontSize: 19.w, color: const Color.fromRGBO(51, 51, 51, 1), fontWeight: FontWeight.w600 ), ), SizedBox(width: 13.w,), if(controller.userData.value?.genderCode == 1) Container( width: 33.w, height: 13.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(13.w)), color: const Color.fromRGBO(255, 237, 255, 1) ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( Assets.imagesFemale, width: 8.w, height: 8.w, ), SizedBox(width: 1.w,), Text( controller.calculateAge(controller.userData.value?.birthDate ?? "1970-1-1").toString(), style: TextStyle( fontSize: 9.w, color: const Color.fromRGBO(255, 66, 236, 1) ), ) ], ), ), SizedBox(width: 3.w,), Container( width: 33.w, height: 13.w, margin: EdgeInsets.only(right: 2.w), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(13.w)), color: const Color.fromRGBO(234, 255, 219, 1) ), child: Center( child: Text( "在线", style: TextStyle( fontSize: 9.w, color: const Color.fromRGBO(38, 199, 124, 1) ), ), ), ), SizedBox(width: 4.w,), if(controller.userData.value?.identityCard != null) Container( width: 43.w, height: 13.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(13.w)), color: const Color.fromRGBO(246, 237, 255, 1) ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( Assets.imagesRealName, width: 8.w, height: 7.w, ), SizedBox(width: 2.w,), Text( "实名", style: TextStyle( fontSize: 9.w, color: const Color.fromRGBO(160, 92, 255, 1) ), ) ], ), ), SizedBox(width: 4.w,), if(controller.userData.value?.genderCode == 0) Container( width: 33.w, height: 13.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(13.w)), color: const Color.fromRGBO(237, 245, 255, 1) ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( Assets.imagesMale, width: 8.w, height: 8.w, ), SizedBox(width: 1.w,), Text( controller.calculateAge(controller.userData.value?.birthDate ?? "").toString(), style: TextStyle( fontSize: 9.w, color: const Color.fromRGBO(120, 140, 255, 1) ), ) ], ), ), ], ), Container( width: 63.w, height: 27.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(27.w)), color: const Color.fromRGBO(117, 98, 249, .1) ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( Assets.imagesPlayer, width: 15.w, height: 15.w, ), SizedBox(width: 4.w,), Image.asset( Assets.imagesVoice, width: 15.w, height: 13.w, ), SizedBox(width: 4.w,), Text( "6'", style: TextStyle( fontSize: 11.w, color: const Color.fromRGBO(117, 98, 249, 1) ), ) ], ), ) ], ), SizedBox(height: 8.w,), Text( "父母催婚找个结婚的", style: TextStyle( fontSize: 11.w, color: const Color.fromRGBO(144, 144, 144, 1) ), ), SizedBox(height: 11.w,), Wrap( spacing: 7.w, runSpacing: 7.w, children: [ ...controller.tagList.map((e){ return TagItem(label: e); }), ], ), SizedBox(height: 16.w,), Text( "IP属地:${controller.location.value == '' ? controller.userData.value?.provinceName : controller.location.value.split("-")[0]}", style: TextStyle( fontSize: 9.w, color: const Color.fromRGBO(144, 144, 144, 1) ), ), Text( "趣恋恋ID:${controller.userData.value?.id}", style: TextStyle( fontSize: 9.w, color: const Color.fromRGBO(144, 144, 144, 1) ), ), Spacer(), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( width: 246.w, height: 38.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(38.w)), color: const Color.fromRGBO(51, 51, 51, 1) ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( Assets.imagesChatBtn, width: 13.w, height: 12.w, ), SizedBox(width: 4.w,), Text( "发消息", style: TextStyle( fontSize: 15.w, color: Colors.white, fontWeight: FontWeight.w500 ), ) ], ), ), Container( width: 81.w, height: 38.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(38.w)), color: const Color.fromRGBO(117, 98, 249, 1) ), child: Center( child: Text( "关注", style: TextStyle( fontSize: 15.w, color: Colors.white, fontWeight: FontWeight.w500 ), ), ), ), ], ) ], ), ), ), ), if(controller.imgList.length > 0) Positioned( left: 15.w, top: 313.w, child: Row( children: [ ...controller.imgList.asMap().entries.map((entry){ return Container( margin: EdgeInsets.only(right: 7.w), child: InkWell( onTap: (){ controller.nowSelect.value = entry.key; }, child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(7.w)), child: Container( width: 40.w, height: 40.w, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(7.w)), border: controller.nowSelect.value == entry.key ? Border.all(width: 1.w, color: Colors.white) : null ), child: Center( child: Image.network( entry.value, width: 38.w, height: 38.w, fit: BoxFit.cover, ), ), ), ), ), ); }), ], ), ), ], ) ] ], ), ), ); }, ); } } class SetItem extends StatefulWidget { final String label; final bool showRequired; final Widget child; final bool hideArrow; const SetItem({super.key, required this.label, this.showRequired = true, required this.child, this.hideArrow = false}); @override State createState() => _SetItemState(); } class _SetItemState extends State { @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(bottom: 3.w), decoration: BoxDecoration( border: Border( bottom: BorderSide(width: 1, color: const Color.fromRGBO(245, 245, 245, 1)) ) ), child: InkWell( child: SizedBox( height: 41.w, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ RichText( text: TextSpan( children: [ TextSpan( text: widget.label, style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(51, 51, 51, 1), fontWeight: FontWeight.w500 ) ), if(widget.showRequired) TextSpan( text: "*", style: TextStyle( fontSize: 13.w, color: const Color.fromRGBO(224, 54, 54, 1), fontWeight: FontWeight.w500 ) ), ] ), ), Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ widget.child, SizedBox(width: 15.w,), Icon( Icons.keyboard_arrow_right, size: 13.w, color: Color.fromRGBO(191, 191, 191, widget.hideArrow ? 0 : 1) ) ], ), ) ], ), ), ), ); } } class TagItem extends StatelessWidget { final String label; const TagItem({super.key, required this.label}); @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.symmetric( vertical: 2.w, horizontal: 6.w ), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(13.w)), color: const Color.fromRGBO(245, 247, 255, 1) ), child: Text( label, style: TextStyle( fontSize: 11.w, color: const Color.fromRGBO(51, 51, 51, 1) ), ), ); } }