step_partner_logic.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:keyboard/utils/toast_util.dart';
  4. import '../../../../data/bean/default_avatar_info.dart';
  5. import '../../../../data/repository/config_repository.dart';
  6. import '../../../../dialog/select_birthday_dialog.dart';
  7. import '../../../../utils/age_zodiac_sign_util.dart';
  8. import '../../../../utils/atmob_log.dart';
  9. mixin StepPartnerLogic {
  10. final tag = "StepPartnerLogic";
  11. final ConfigRepository configRepository = ConfigRepository.getInstance();
  12. Rxn<DefaultAvatarInfo> get currentDefaultAvatarInfo =>
  13. configRepository.defaultAvatarInfo;
  14. final RxString _partnerAvatarUrl = "".obs;
  15. String get partnerAvatarUrl => _partnerAvatarUrl.value;
  16. final partnerName = "".obs;
  17. // 加这个controller是因为在防止在返回其他页面时,输入框的内容会被清空
  18. TextEditingController partnerNameController = TextEditingController();
  19. final RxnInt _partnerGender = RxnInt(null);
  20. int? get partnerGender => _partnerGender.value;
  21. final RxList<String> _girlAvatars = <String>[].obs;
  22. final RxList<String> _boyAvatars = <String>[].obs;
  23. final RxString _currentPartnerDate = "".obs;
  24. String get currentPartnerDate => _currentPartnerDate.value;
  25. final Rxn<DateTime> _currentPartnerBirthday = Rxn<DateTime>(null);
  26. DateTime? get currentPartnerBirthday => _currentPartnerBirthday.value;
  27. DateComponents get dateComponents =>
  28. DateComponents.fromDateTime(_currentPartnerBirthday.value!);
  29. void nextAvatar() {
  30. AtmobLog.d(tag, "nextAvatar");
  31. if (_partnerGender.value == 1) {
  32. int currentIndex = _boyAvatars.indexOf(_partnerAvatarUrl.value);
  33. _partnerAvatarUrl.value = _boyAvatars[(currentIndex + 1) % _boyAvatars.length];
  34. } else {
  35. int currentIndex = _girlAvatars.indexOf(_partnerAvatarUrl.value);
  36. _partnerAvatarUrl.value = _girlAvatars[(currentIndex + 1) % _girlAvatars.length];
  37. }
  38. }
  39. void updateAvatarListsAndSelectFirst(DefaultAvatarInfo? info) {
  40. _boyAvatars.assignAll(info?.maleAvatars ?? []);
  41. _girlAvatars.assignAll(info?.femaleAvatars ?? []);
  42. if (_partnerGender.value == 1) {
  43. _partnerAvatarUrl.value = _boyAvatars.isNotEmpty ? _boyAvatars.first : "";
  44. } else {
  45. _partnerAvatarUrl.value = _girlAvatars.isNotEmpty ? _girlAvatars.first : "";
  46. }
  47. }
  48. void onNicknameChange(String name) {
  49. AtmobLog.d(tag, "onNicknameChange: $name");
  50. if (name.isNotEmpty) {
  51. partnerName.value = name;
  52. } else {
  53. partnerName.value = "";
  54. }
  55. }
  56. void onPartnerGenderChanged(int gender) {
  57. AtmobLog.d(tag, gender.toString());
  58. _partnerGender.value = gender;
  59. // 切换性别时自动切换对应性别的第一个头像
  60. if (gender == 1 && _boyAvatars.isNotEmpty) {
  61. _partnerAvatarUrl.value = _boyAvatars.first;
  62. } else if (_girlAvatars.isNotEmpty) {
  63. _partnerAvatarUrl.value = _girlAvatars.first;
  64. } else {
  65. _partnerAvatarUrl.value = "";
  66. }
  67. }
  68. void changePartnerBirthday() {
  69. SelectBirthdayDialog.show(
  70. initialDate: _currentPartnerBirthday.value ?? DateTime.now(),
  71. minimumDate: DateTime.parse("1921-01-01"),
  72. onDateChanged: (dataTime) {
  73. _currentPartnerBirthday.value = dataTime;
  74. },
  75. );
  76. }
  77. }