| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- import 'package:flutter/cupertino.dart';
- import 'package:get/get.dart';
- import 'package:injectable/injectable.dart';
- import 'package:keyboard/module/keyboard_guide/enums/keyboard_guide_msg_type.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<KeyboardGuideMsg> msgList = <KeyboardGuideMsg>[].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(
- false,
- StringName.keyboardGuideTaReply1,
- KeyboardGuideMsgType.copy.type,
- DateTime.now().millisecond,
- ),
- );
- msgList.add(
- KeyboardGuideMsg(
- false,
- StringName.keyboardGuideTaReply2,
- KeyboardGuideMsgType.copy.type,
- DateTime.now().millisecond,
- ),
- );
- msgList.add(
- KeyboardGuideMsg(
- false,
- StringName.keyboardGuideTaReply3,
- KeyboardGuideMsgType.copy.type,
- DateTime.now().millisecond,
- ),
- );
- // 亲密度设置的引导消息
- msgList.add(
- KeyboardGuideMsg(
- false,
- StringName.keyboardGuideTaReply4,
- KeyboardGuideMsgType.intimacySetting.type,
- DateTime.now().millisecond,
- ),
- );
- }
- /// 添加消息到消息列表中
- void _addMsg2List(String msg, bool isMe) {
- msgList.add(
- KeyboardGuideMsg(
- isMe,
- msg,
- KeyboardGuideMsgType.normal.type,
- 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();
- });
- }
- }
- }
|