import 'package:get/get.dart'; import 'package:injectable/injectable.dart'; import 'package:keyboard/base/base_controller.dart'; import 'package:keyboard/data/bean/default_avatar_info.dart'; import 'package:keyboard/data/bean/keyboard_info.dart'; import 'package:keyboard/module/change/gender/change_gender_page.dart'; import 'package:keyboard/utils/atmob_log.dart'; import '../../../data/repository/config_repository.dart'; import '../../change/birthday/change_birthday_page.dart'; import '../../change/nickname/change_nickname_page.dart'; enum ProfileEditMode { add, // 新增 edit, // 编辑 } @injectable class ProfileEditController extends BaseController { final tag = "ProfileEditController"; final ConfigRepository configRepository; final RxnInt _currentGender = RxnInt(null); final RxString _avatarUrl = "".obs; String get avatarUrl => _avatarUrl.value; Rxn get currentDefaultAvatarInfo => configRepository.defaultAvatarInfo; late final ProfileEditMode mode; final Rx _currentCustomKeyboardInfo = KeyboardInfo().obs; Rx get currentCustomKeyboardInfo => _currentCustomKeyboardInfo; final RxnString _currentBirthday = RxnString(null); String? get currentBirthday => _currentBirthday.value; // 当前昵称 final RxnString _currentNickname = RxnString(null); String? get currentNickname => _currentNickname.value; // 当前自定义键盘亲密度 final RxInt _currentCustomIntimacy = 30.obs; int get currentCustomIntimacy => _currentCustomIntimacy.value; // 当前定制亲密度是否有变化 final RxBool _customIntimacyChanged = false.obs; bool get customIntimacyChanged => _customIntimacyChanged.value; final RxList _boyAvatars = [].obs; final RxList _girlAvatars = [].obs; ProfileEditController(this.configRepository); @override void onInit() { super.onInit(); final KeyboardInfo? keyboardInfo = Get.arguments?["keyboardInfo"]; if (keyboardInfo != null) { mode = ProfileEditMode.edit; _currentCustomKeyboardInfo.value = keyboardInfo; _currentNickname.value = keyboardInfo.name; _currentGender.value = keyboardInfo.gender; _currentCustomIntimacy.value = keyboardInfo.intimacy ?? 30; _avatarUrl.value = keyboardInfo.avatar ?? ""; } else { mode = ProfileEditMode.add; _currentGender.value = null; _currentCustomIntimacy.value = 30; _avatarUrl.value = ""; } ever(currentDefaultAvatarInfo, (info) { updateAvatarListsAndSelectFirst(info); }); } @override void onReady() { super.onReady(); updateAvatarListsAndSelectFirst(currentDefaultAvatarInfo.value); } void updateAvatarListsAndSelectFirst(DefaultAvatarInfo? info) { _boyAvatars.assignAll(info?.maleAvatars ?? []); _girlAvatars.assignAll(info?.femaleAvatars ?? []); if (_currentGender.value == 1 && _boyAvatars.isNotEmpty) { _avatarUrl.value = _boyAvatars[0]; } else if (_girlAvatars.isNotEmpty) { _avatarUrl.value = _girlAvatars[0]; } } clickSaveButton() { AtmobLog.d(tag, 'clickSaveButton'); } void nextAvatar() { List avatars = _currentGender.value == 1 ? _boyAvatars : _girlAvatars; if (avatars.isEmpty) return; int currentIndex = avatars.indexOf(_avatarUrl.value); _avatarUrl.value = avatars[(currentIndex + 1) % avatars.length]; AtmobLog.d(tag, 'nextAvatar: ${_avatarUrl.value}'); } // 更新亲密度 void updateIntimacy(int intimacy) { _currentCustomIntimacy.value = intimacy; } clickBack() { AtmobLog.d(tag, 'clickBackButton'); Get.back(); } void clickNickname() async { AtmobLog.d(tag, 'clickNickname'); final result = await ChangeNicknamePage.start( nickName: _currentNickname.value, ); if (result != null) { _currentNickname.value = result; } } void clickGender() async { AtmobLog.d(tag, 'clickGender'); final result = await ChangeGenderPage.start(); if (result != null) { _currentGender.value = result; } } void clickBirthday() async { AtmobLog.d(tag, 'clickBirthday'); final result = await ChangeBirthdayPage.start( birthday: _currentBirthday.value, ); if (result != null) { AtmobLog.d(tag, 'clickBirthday result: $result'); _currentBirthday.value = result; } } String get genderText { if (_currentGender.value == 1) return '男'; if (_currentGender.value == 2) return '女'; return '请选择'; } }