Browse Source

feat:键盘插件,聊天例子,实现长按复制,以及处理点击软键盘的发送按钮

hezihao 8 months ago
parent
commit
8cdbe6720b

+ 17 - 8
plugins/keyboard_android/example/lib/page/chat_page.dart

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
 
 import '../model/msg.dart';
 import '../util/ToastUtil.dart';
+import '../util/clipboard_util.dart';
 
 /// 聊天页面
 class ChatPage extends StatefulWidget {
@@ -29,14 +30,8 @@ class ChatPageState extends State<ChatPage> {
   /// 添加消息到消息列表中
   void _addMsg2List(String msg, bool isMe) {
     setState(() {
-      String msgText;
-      if (isMe) {
-        msgText = "我:$msg";
-      } else {
-        msgText = "对方:$msg";
-      }
       _msgList.add(
-        Msg(isMe: isMe, msg: msgText, createTime: DateTime.now().millisecond),
+        Msg(isMe: isMe, msg: msg, createTime: DateTime.now().millisecond),
       );
     });
     Future.delayed(const Duration(milliseconds: 300), () {
@@ -115,7 +110,14 @@ class ChatPageState extends State<ChatPage> {
         ],
       );
     }
-    return Container(padding: const EdgeInsets.all(8.0), child: content);
+    return GestureDetector(
+      onLongPress: () {
+        // 长按消息,复制文本到剪切板
+        ClipboardUtil.copyToClipboard(msg.msg);
+        ToastUtil.showToast("已复制到剪切板");
+      },
+      child: Container(padding: const EdgeInsets.all(8.0), child: content),
+    );
   }
 
   /// 构建头像
@@ -172,6 +174,13 @@ class ChatPageState extends State<ChatPage> {
                       Expanded(
                         flex: 1,
                         child: TextField(
+                          // 设置按钮显示为发送
+                          textInputAction: TextInputAction.send,
+                          onSubmitted: (value) {
+                            // 用户点击软键盘的发送按钮
+                            var msg = _editingController.text;
+                            _sendMsg(msg);
+                          },
                           // 输入框焦点
                           focusNode: _inputFocusNode,
                           // 点击外部区域,关闭软键盘

+ 15 - 0
plugins/keyboard_android/example/lib/util/clipboard_util.dart

@@ -0,0 +1,15 @@
+import 'package:flutter/services.dart';
+
+/// 剪切板工具类
+class ClipboardUtil {
+  /// 复制文本到剪切板
+  static Future<void> copyToClipboard(String text) async {
+    await Clipboard.setData(ClipboardData(text: text));
+  }
+
+  /// 从剪切板获取文本
+  static Future<String> getClipboardText() async {
+    final data = await Clipboard.getData(Clipboard.kTextPlain);
+    return data?.text ?? "";
+  }
+}