import 'dart:convert'; import 'package:flutter/services.dart'; import 'package:keyboard/data/repository/characters_repository.dart'; import 'package:keyboard/data/repository/keyboard_repository.dart'; import '../utils/mmkv_util.dart'; class KeyboardMethodHandler { final KeyboardRepository keyboardRepository; final CharactersRepository charactersRepository; static const String keyboardSelect = 'keyboard_select'; KeyboardMethodHandler( this.keyboardRepository, this.charactersRepository, ); Future handleMethodCall(MethodCall call) async { switch (call.method) { case 'getKeyboardList': return await _handleGetKeyboardList(call); case 'selectedKeyboard': return _handleSelectedKeyboard(call); case 'getCharacterList': return await _handleGetCharacterList(call); 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; } } } return jsonEncode(keyboardList.toJson()); } Future _handleSelectedKeyboard(MethodCall call) async { final String keyboardId = call.arguments['keyboardId']; KVUtil.putString(keyboardSelect, keyboardId); return "{}"; } Future _handleGetCharacterList(MethodCall call) async { final String keyboardId = call.arguments['keyboardId']; final characterList = await keyboardRepository.getKeyboardCharacterList(keyboardId: keyboardId); return jsonEncode(characterList.toJson()); } }