You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Windows端Shift组合输入大写字符触发KeyRepeatEvent报错求助

问题描述

开发Windows平台Flutter应用时,使用TextField按住左/右Shift键输入大写字符会触发断言错误,使用Caps Lock输入大写则无此问题。报错信息如下:

平台消息回调期间触发了以下断言:
派发了KeyRepeatEvent,但状态显示物理按键并未按下。如果在实际应用中出现此问题,请向Flutter报告bug。如果在单元测试中出现,请确保模拟事件遵循`HardwareKeyboard`文档中说明的Flutter事件模型。触发的事件为:KeyRepeatEvent#d843e(physicalKey: PhysicalKeyboardKey#700e1(usbHidUsage: "0x000700e1", debugName: "左Shift"), logicalKey: LogicalKeyboardKey#00102(keyId: "0x200000102", keyLabel: "左Shift", debugName: "左Shift"), character: null, timeStamp: 124:45:14.849439)
'package:flutter/src/services/hardware_keyboard.dart':
断言失败:第432行第16位:'_pressedKeys.containsKey(event.physicalKey)'

该断言要么表明框架本身存在错误,要么需要在错误信息中提供更多信息以帮助定位并修复根本原因。
无论哪种情况,请向Flutter官方提交bug报告。

抛出异常时的调用栈:
#2      HardwareKeyboard._assertEventIsRegular.<anonymous closure> (package:flutter/src/services/hardware_keyboard.dart:432:16)
#3      HardwareKeyboard._assertEventIsRegular (package:flutter/src/services/hardware_keyboard.dart:443:6)
#4      HardwareKeyboard.handleKeyEvent (package:flutter/src/services/hardware_keyboard.dart:535:5)
#5      KeyEventManager.handleRawKeyMessage (package:flutter/src/services/hardware_keyboard.dart:881:37)
#6      BasicMessageChannel.setMessageHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:197:49)
#7      _DefaultBinaryMessenger.setMessageHandler.<anonymous closure> (package:flutter/src/services/binding.dart:387:35)
#8      _invoke2 (dart:ui/hooks.dart:186:13)
#9      _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:42:5)
#10     _Channel.push (dart:ui/channel_buffers.dart:132:31)
#11     ChannelBuffers.push (dart:ui/channel_buffers.dart:329:17)
#12     PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:599:22)
#13     _dispatchPlatformMessage (dart:ui/hooks.dart:89:31)
(elided 2 frames from class _AssertionError)

Flutter环境配置:

Flutter 3.3.4 • stable通道 • https://github.com/flutter/flutter.git
框架版本 • eb6d86ee27(13天前提交)• 2022-10-04 22:31:45 -0700
引擎版本 • c08d7d5efc
工具版本 • Dart 2.18.2 • DevTools 2.15.0

运行flutter doctor...
检查摘要(查看详情请运行flutter doctor -v):
[√] Flutter(stable通道,3.3.4,运行于Microsoft Windows [版本10.0.19044.2130],区域设置de-DE)
[√] Android开发工具链(Android SDK版本32.1.0-rc1)
[√] Chrome - 支持Web开发
[√] Visual Studio - 支持Windows开发(Visual Studio Community 2022 17.3.6)
[√] Android Studio(版本2021.2)
[√] VS Code(版本1.71.2)
[√] 已连接设备(3台可用)
[√] HTTP主机可用性

• 未发现问题!
问题成因

这是Flutter框架在Windows平台上的底层键盘事件处理bug:当按住Shift键输入字符时,系统会持续派发Shift键的重复事件(KeyRepeatEvent),但Flutter内部维护的已按下按键集合_pressedKeys中没有对应的物理键记录,导致断言触发。Caps Lock不会产生按键重复事件,因此不会触发该错误。

解决方法
  • 升级Flutter版本:该bug在Flutter 3.7及以后的稳定版中已被修复,执行flutter upgrade命令升级到最新稳定版即可解决。
  • 临时规避方案:若暂时无法升级,可通过全局捕获特定断言错误阻止应用崩溃,在main函数中添加如下代码:
import 'dart:ui';

void main() {
  // 忽略键盘事件相关的特定断言错误
  PlatformDispatcher.instance.onError = (error, stack) {
    if (error.toString().contains('_pressedKeys.containsKey(event.physicalKey)')) {
      return true;
    }
    return false;
  };
  runApp(MyApp());
}
  • 切换至Beta/Dev通道:如果稳定版暂未推送修复,可切换到Beta或Dev通道获取修复版本:
flutter channel beta
flutter upgrade

内容的提问来源于stack exchange,提问作者F.M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:20:30