change_character_controller.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import 'package:injectable/injectable.dart';
  2. import 'package:keyboard/base/base_controller.dart';
  3. import 'package:get/get.dart';
  4. import '../../../data/bean/custom_config_info.dart';
  5. import '../../../data/repository/config_repository.dart';
  6. import '../../../utils/atmob_log.dart';
  7. import '../../../utils/toast_util.dart';
  8. @injectable
  9. class ChangeCharacterController extends BaseController {
  10. final String tag = "ChangeCharacterController";
  11. final ConfigRepository configRepository;
  12. CustomConfigInfo? get currentCharacterCustomConfig =>
  13. configRepository.characterCustomConfig.value;
  14. final RxList<CharactersList> characterLabelsList = <CharactersList>[].obs;
  15. final RxList<CharactersList> characterSelectLabels = <CharactersList>[].obs;
  16. ChangeCharacterController(this.configRepository);
  17. @override
  18. void onInit() {
  19. super.onInit();
  20. initData();
  21. final List<CharactersList>? characters =
  22. Get.arguments["characters"] as List<CharactersList>?;
  23. if (characters != null) {
  24. characterSelectLabels.assignAll(characters);}
  25. }
  26. // 初始化数据
  27. void initData() {
  28. AtmobLog.d(tag, "initData");
  29. characterLabelsList.value = currentCharacterCustomConfig?.characters ?? [];
  30. }
  31. void selectCharacter(CharactersList name) {
  32. handleSelection(
  33. name: name,
  34. selectedList: characterSelectLabels,
  35. max: currentCharacterCustomConfig?.maxCharacterNum ?? 3,
  36. errorMessage:
  37. "最多选择${currentCharacterCustomConfig?.maxCharacterNum ?? 3}个关键词",
  38. );
  39. }
  40. ///标签选择处理
  41. void handleSelection({
  42. required dynamic name,
  43. required RxList<dynamic> selectedList,
  44. required int max,
  45. required String errorMessage,
  46. }) {
  47. if (selectedList.contains(name)) {
  48. selectedList.remove(name);
  49. } else if (selectedList.length < max) {
  50. selectedList.add(name);
  51. } else {
  52. ToastUtil.show(errorMessage);
  53. }
  54. }
  55. void clickBack() {
  56. Get.back();
  57. }
  58. void clickSave() {
  59. if (characterSelectLabels.isEmpty) {
  60. ToastUtil.show(
  61. "至少选择${currentCharacterCustomConfig?.minCharacterNum ?? 1}个关键词",
  62. );
  63. return;
  64. }
  65. AtmobLog.d(
  66. tag,
  67. "clickSave characterSelectLabels: ${characterSelectLabels.toJson()}",
  68. );
  69. Get.back(result: characterSelectLabels);
  70. }
  71. }