import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:injectable/injectable.dart'; import 'package:keyboard/resource/string.gen.dart'; import '../../base/base_controller.dart'; import '../../data/bean/keyboard_guide_msg.dart'; import '../../utils/toast_util.dart'; /// 键盘引导页面Controller @injectable class KeyboardGuidePageController extends BaseController { /// TextField操作控制器 final TextEditingController editingController = TextEditingController(); /// ListView的滚动控制器 final ScrollController scrollController = ScrollController(); /// 输入框焦点 final FocusNode inputFocusNode = FocusNode(); /// 消息列表 final RxList msgList = [].obs; @override void onInit() { super.onInit(); inputFocusNode.addListener(_handleTextFieldFocusChange); // 初始化消息列表 _initMsgList(); // 进入页面,就获取输入框焦点 // inputFocusNode.requestFocus(); } @override void onClose() { // 取消监听 inputFocusNode.removeListener(_handleTextFieldFocusChange); inputFocusNode.dispose(); editingController.dispose(); scrollController.dispose(); super.onClose(); } /// 关闭页面 clickBack() { Get.back(); } /// 发送消息 void sendMsg(String msg) { if (msg.isEmpty) { ToastUtil.show("请输入要发送的消息内容"); return; } //添加消息到列表中 _addMsg2List(msg, true); // 延迟生成对方的回复消息 // Future.delayed(const Duration(milliseconds: 150), () { // //添加消息到列表中 // _addMsg2List(_replyMessage2Client(msg), false); // }); //清除输入框的内容 editingController.clear(); } // /// 测试,生成回复消息 // String _replyMessage2Client(String clientMsg) { // return clientMsg // .replaceAll("我", "你") // .replaceAll("吗", "") // .replaceAll("?", "!") // .replaceAll("?", "!"); // } /// 初始化消息列表 void _initMsgList() { // 添加一些默认消息 msgList.add( KeyboardGuideMsg( isMe: false, content: StringName.keyboardGuideTaReply1, createTime: DateTime.now().millisecond, ), ); msgList.add( KeyboardGuideMsg( isMe: false, content: StringName.keyboardGuideTaReply2, createTime: DateTime.now().millisecond, ), ); msgList.add( KeyboardGuideMsg( isMe: false, content: StringName.keyboardGuideTaReply3, createTime: DateTime.now().millisecond, ), ); } /// 添加消息到消息列表中 void _addMsg2List(String msg, bool isMe) { msgList.add( KeyboardGuideMsg( isMe: isMe, content: msg, createTime: DateTime.now().millisecond, ), ); update(); _scrollToBottom(); } /// 滚动列表到底部 void _scrollToBottom() { if (scrollController.hasClients) { scrollController.jumpTo(scrollController.position.maxScrollExtent); } } /// 处理输入框的焦点变化 void _handleTextFieldFocusChange() { // 输入框获取焦点,滚动列表到底部 if (inputFocusNode.hasFocus) { Future.delayed(const Duration(milliseconds: 350), () { _scrollToBottom(); }); } } }