import 'package:easy_refresh/easy_refresh.dart'; import 'package:flutter/cupertino.dart'; import 'package:injectable/injectable.dart'; import 'package:keyboard/base/base_controller.dart'; import 'package:get/get.dart'; import 'package:keyboard/data/repository/characters_repository.dart'; import 'package:keyboard/dialog/character_details_dialog.dart'; import 'package:keyboard/module/character/character_controller.dart'; import 'package:keyboard/utils/atmob_log.dart'; import 'package:keyboard/utils/toast_util.dart'; import '../../../data/bean/character_group_info.dart'; import '../../../data/bean/character_info.dart'; import '../../../data/bean/keyboard_info.dart'; @injectable class CharacterGroupContentController extends BaseController { final tag = "CharacterGroupContentController"; Rx get currentKeyboardInfo => Get.find().currentKeyboardInfo; Rx get currentCharacterGroupInfo => Get.find().currentCharacterGroupInfo; final CharactersRepository charactersRepository; CharacterGroupContentController(this.charactersRepository); RxList characterList = [].obs; RxInt currentListCount = 0.obs; RxInt currentPage = 1.obs; late EasyRefreshController refreshController; @override void onInit() async { super.onInit(); refreshController = EasyRefreshController( controlFinishLoad: true, controlFinishRefresh: true, ); // 等待页面渲染完成后再加载数据 WidgetsBinding.instance.addPostFrameCallback((_) { refreshData(); }); everAll([currentCharacterGroupInfo, currentKeyboardInfo], (_) async { await refreshData(); }); } @override onReady() { super.onReady(); } // 下拉刷新 Future refreshData() async { AtmobLog.d( tag, 'refreshData ${currentCharacterGroupInfo.value.id}, ${currentKeyboardInfo.value.id}', ); currentPage.value = 1; await getCurrentCharacterListInfo(isRefresh: true); refreshController.finishRefresh(); refreshController.resetFooter(); // 允许加载更多 } // 上拉加载更多 Future loadMoreData() async { if (characterList.length >= currentListCount.value) { refreshController.finishLoad(IndicatorResult.noMore); return; } currentPage.value++; await getCurrentCharacterListInfo(isRefresh: false); refreshController.finishLoad(IndicatorResult.success); } // 获取角色列表 Future getCurrentCharacterListInfo({bool isRefresh = false}) async { var response = await charactersRepository.getCharactersPage( groupId: currentCharacterGroupInfo.value.id.toString(), page: currentPage.value, keyboardId: currentKeyboardInfo.value.id.toString(), ); if (isRefresh) { characterList.value = response.characterInfos; } else { characterList.addAll(response.characterInfos); } currentListCount.value = response.count; } @override void onClose() { refreshController.dispose(); super.onClose(); } void itemButtonClick(CharacterInfo characterInfo) { AtmobLog.d(tag, 'characterInfo ${characterInfo.toJson()} '); CharacterDetailsDialog.show( characterInfo: characterInfo, clickCallback: () { if (characterInfo.isLock == true) { // addCharacter(characterInfo); } else if (characterInfo.isAdd == false) { // unlockCharacter(characterInfo); } else { ToastUtil.show('该人设已添加'); } }, ); } void addCharacter(CharacterInfo characterInfo) { charactersRepository.characterAdd( characterId: characterInfo.id.toString(), keyboardId: currentKeyboardInfo.value.id.toString(), ); } void unlockCharacter(CharacterInfo characterInfo) { charactersRepository.characterUnlock( characterId: characterInfo.id.toString(), keyboardId: currentKeyboardInfo.value.id.toString(), ); } }