import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:keyboard/base/base_view.dart'; import 'package:keyboard/resource/string.gen.dart'; import '../../../../resource/assets.gen.dart'; import '../../new_user_controller.dart'; class StepGenderView extends BaseView { const StepGenderView({super.key}); @override Color backgroundColor() { return Colors.transparent; } @override Widget buildBody(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( margin: EdgeInsets.only(left: 30.w, right: 30.w), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( StringName.newUserGenderTitle, style: TextStyle( color: Colors.black.withAlpha(204), fontSize: 22.sp, fontWeight: FontWeight.w500, height: 0, ), ), SizedBox(height: 7.h), Text( StringName.newUserGenderDesc, style: TextStyle( color: Colors.black.withAlpha(153), fontSize: 14.sp, fontWeight: FontWeight.w400, ), ), ], ), ), SizedBox(height: 72.w), Container( alignment: Alignment.center, child: Column( children: [ _buildGenderSelector( genderValue: 2, title: '女生', subtitle: 'Girl', logo: Assets.images.iconChangeGenderFemaleLogo.image( width: 20.w, height: 20.w, ), selectedImage: Assets.images.iconChangeGenderFemaleSelect.image( width: 320.w, fit: BoxFit.fill, ), unselectedImage: Assets.images.iconChangeGenderFemaleUnselect .image(width: 320.w, fit: BoxFit.cover), isRightAligned: true, ), SizedBox(height: 25.h), _buildGenderSelector( genderValue: 1, title: '男生', subtitle: 'Boy', logo: Assets.images.iconChangeGenderMaleLogo.image( width: 20.w, height: 20.w, ), selectedImage: Assets.images.iconChangeGenderMaleSelect.image( width: 320.w, fit: BoxFit.fill, ), unselectedImage: Assets.images.iconChangeGenderMaleUnselect .image(width: 320.w, fit: BoxFit.cover), isRightAligned: false, ), ], ), ), ], ); } Widget _buildGenderSelector({ required int genderValue, // 1: 男生, 2: 女生 required String title, required String subtitle, required Widget logo, required Image selectedImage, required Image unselectedImage, required bool isRightAligned, }) { return GestureDetector( onTap: () { controller.changeGender(genderValue); }, child: Obx(() { final isSelected = controller.currentGender == genderValue; return SizedBox( width: 320.w, height: 115.h, child: Stack( clipBehavior: Clip.none, children: [ isSelected ? selectedImage : unselectedImage, Container( alignment: isRightAligned ? Alignment.centerRight : Alignment.centerLeft, padding: EdgeInsets.only( right: isRightAligned ? 40.w : 0, left: isRightAligned ? 0 : 40.w, ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Row( mainAxisSize: MainAxisSize.min, children: isRightAligned ? [ logo, SizedBox(width: 4.w), Text( title, style: TextStyle( color: isSelected ? Colors.black.withAlpha(204) : Colors.black.withAlpha(102), fontSize: 22.sp, fontWeight: FontWeight.w700, ), ), ] : [ Text( title, style: TextStyle( color: isSelected ? Colors.black.withAlpha(204) : Colors.black.withAlpha(102), fontSize: 22.sp, fontWeight: FontWeight.w700, ), ), SizedBox(width: 4.w), logo, ], ), SizedBox(height: 4.w), Row( mainAxisSize: MainAxisSize.min, children: isRightAligned ? [ SizedBox(width: 20.w, height: 20.w), SizedBox(width: 4.w), Text( subtitle, style: TextStyle( color: Colors.black.withAlpha(128), fontSize: 14.sp, fontWeight: FontWeight.w400, ), ), ] : [ Text( subtitle, style: TextStyle( color: Colors.black.withAlpha(128), fontSize: 14.sp, fontWeight: FontWeight.w400, ), ), SizedBox(width: 4.w), SizedBox(width: 20.w, height: 20.w), ], ), ], ), ), ], ), ); }), ); } }