import 'dart:convert'; import 'package:flutter/services.dart'; import 'package:keyboard/data/bean/member_info.dart'; import 'package:keyboard/data/repository/account_repository.dart'; import 'package:keyboard/data/repository/characters_repository.dart'; import 'package:keyboard/data/repository/keyboard_repository.dart'; import '../data/api/response/keyboard_list_response.dart'; import '../data/bean/keyboard_info.dart'; import '../utils/mmkv_util.dart'; class KeyboardMethodHandler { final KeyboardRepository keyboardRepository; final CharactersRepository charactersRepository; final AccountRepository accountRepository; // 用处存储选中的键盘id static const String keyboardSelect = 'keyboard_select'; bool get isLogin => accountRepository.isLogin.value; bool get isMember => accountRepository.isMember.value; late KeyboardListResponse keyboardListResponse; KeyboardMethodHandler( this.keyboardRepository, this.charactersRepository, this.accountRepository, ); Future handleMethodCall(MethodCall call) async { switch (call.method) { case 'getKeyboardList': return _handleGetKeyboardList(call); case 'selectedKeyboard': return _handleSelectedKeyboard(call); case 'getCharacterList': return _handleGetCharacterList(call); case 'getCurrentKeyboardInfo': return _handleGetCurrentKeyboardInfo(call); case 'getPrologueList': return _handleGetPrologueList(call); case 'isLogin': return isLogin; case 'isMember': return isMember; default: throw MissingPluginException('Not implemented: ${call.method}'); } } Future _handleGetKeyboardList(MethodCall call) async { String? type = call.arguments?['type'] as String?; final keyboardList = await keyboardRepository.getKeyboardList(type: type); final selectKeyboardId = KVUtil.getString(keyboardSelect, null); if (selectKeyboardId != null) { for (var element in keyboardList.keyboardInfos) { if (element.id == selectKeyboardId) { element.isSelect = true; } } } keyboardListResponse = keyboardList; return jsonEncode(keyboardList.toJson()); } Future _handleSelectedKeyboard(MethodCall call) async { final String keyboardId = call.arguments['keyboardId']; if ( keyboardListResponse.keyboardInfos.isEmpty) { return jsonEncode({"error": "Keyboard list not initialized"}); } final selectedKeyboard = keyboardListResponse.keyboardInfos.firstWhere( (element) => element.id == keyboardId, orElse: () => KeyboardInfo(), ); KVUtil.putString(keyboardSelect, jsonEncode(selectedKeyboard.toJson())); return "{}"; } Future _handleGetCurrentKeyboardInfo(MethodCall call) async { final String? keyboardJsonStr = KVUtil.getString(keyboardSelect, null); return keyboardJsonStr ?? "{}"; } Future _handleGetCharacterList(MethodCall call) async { final String keyboardId = call.arguments['keyboardId']; final characterList = await keyboardRepository.getKeyboardCharacterList( keyboardId: keyboardId, ); return jsonEncode(characterList.toJson()); } // 获取开场白列表 Future _handleGetPrologueList(MethodCall call) async { final prologueList = await keyboardRepository.getPrologueList(); return jsonEncode(prologueList.toJson()); } }