基于 Flutter 与 Python 的低延迟虚拟键盘实现方案
一种基于 Flutter 和 Python 的低延迟虚拟键盘方案。通过 Flutter 构建移动端 UI,利用 UDP 协议实现毫秒级通信,并结合 Python 的 pydirectinput 库进行驱动级按键模拟。该方案解决了传统远程输入软件延迟高及游戏屏蔽问题,适用于宿舍、图书馆等静音场景及 FPS 游戏自定义宏需求。

一种基于 Flutter 和 Python 的低延迟虚拟键盘方案。通过 Flutter 构建移动端 UI,利用 UDP 协议实现毫秒级通信,并结合 Python 的 pydirectinput 库进行驱动级按键模拟。该方案解决了传统远程输入软件延迟高及游戏屏蔽问题,适用于宿舍、图书馆等静音场景及 FPS 游戏自定义宏需求。

在远程控制、多端协同或 FPS 游戏场景中,我们经常需要一个能自定义按键布局、且响应极快的虚拟键盘。市面上的远程输入软件通常存在两个问题:
pyautogui)发送的是应用层指令,无法被基于 DirectX 的全屏游戏识别。本项目通过 Flutter 打造极致的笔记本 UI,结合 UDP 协议 实现毫秒级响应,并利用 Python PyDirectInput 驱动级模拟,成功穿透游戏屏蔽,打造出一款真正能'打游戏'的虚拟键盘。
本项目由移动端(客户端)和 PC 端(服务端)两部分组成:
Expanded + flex 权重布局,完美对齐成长方形,还原笔记本手感。Listener 获取原始触控数据,实现智能手掌防误触。RawDatagramSocket 发送极简 UDP 包。pydirectinput 发送驱动级扫描码(Scan Codes),确保游戏兼容性。为了实现'按下即响应',我们抛弃了 TCP。UDP 就像发短信,不需要建立连接,速度极快。 同时,为了实现 App 端的在线/离线状态感应,我们设计了双向心跳:
PING:PING 指令。PING 的数据后立即返回 PONG。笔记本键盘的左右两侧是绝对对齐的。在 Flutter 中,如果手动计算宽度,很容易因为 Margin 导致溢出。
解决方案:统一每一行的 flex 权重总和(例如 100),通过分配比例实现完美长方形。
flex: 60flex: 90flex: 335Column 嵌套实现上下键半高显示,完美还原照片布局。为了赋予软件'机械感',我们为按键增加了多维反馈:
AnimatedContainer 追踪 _activeKeys 状态。按下时,按键边框变亮,产生外发光(Glow Effect)并模拟阴影下陷。HapticFeedback.selectionClick(),让手指在点按时感受到微弱震动。import pydirectinput
import socket
# 将暂停时间设为 0,消除 pydirectinput 的内置延迟
pydirectinput.PAUSE = 0
# 处理心跳与按键映射
def handle_message(message, addr, sock):
if "PING" in message:
sock.sendto(b"PONG", addr) # 返回心跳响应
return
action, key = message.split(":")
target = key_map.get(key)
if target:
if action == "DOWN":
pydirectinput.keyDown(target) # 驱动级模拟按下
else:
pydirectinput.keyUp(target) # 驱动级模拟松开
Dart Listener(
onPointerDown: (event) {
// 识别触点面积:手指尖接触面积小,手掌肉垫接触面积大
// radiusMajor 是判断手掌误触的关键
if (event.kind == PointerDeviceKind.touch && event.radiusMajor > 25) {
print("Palm detected, ignoring...");
return;
}
_sendKey("DOWN", id);
},
onPointerUp: (_) => _sendKey("UP", id),
)
连接前:左上角红色指示灯显示 ENGINE OFFLINE,蓝色 CONNECT 按钮诱导用户连接。 连接后:指示灯变为亮绿色呼吸动画,文字切换为 ENGINE ONLINE。IP 输入框锁定并调暗,按钮变为沉浸式深色。 操作感:WASD 绿色高亮,按键按下时产生实时光效,响应几乎零延迟。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online