Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_34031325
engine
提交
b86bc246
E
engine
项目概览
qq_34031325
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
b86bc246
编写于
2月 02, 2021
作者:
M
Mouad Debbar
提交者:
GitHub
2月 02, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[web] Fix exception when using a keyboard (#24150)
上级
08f39f7c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
58 addition
and
4 deletion
+58
-4
lib/web_ui/lib/src/engine/platform_dispatcher.dart
lib/web_ui/lib/src/engine/platform_dispatcher.dart
+9
-4
lib/web_ui/test/engine/window_test.dart
lib/web_ui/test/engine/window_test.dart
+49
-0
未找到文件。
lib/web_ui/lib/src/engine/platform_dispatcher.dart
浏览文件 @
b86bc246
...
...
@@ -194,10 +194,15 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher {
/// Engine code should use this method instead of the callback directly.
/// Otherwise zones won't work properly.
void
invokeOnKeyData
(
ui
.
KeyData
data
,
_KeyDataResponseCallback
callback
)
{
invoke
(
()
{
callback
(
onKeyData
==
null
?
false
:
onKeyData
!(
data
));
},
_onKeyDataZone
,
);
final
ui
.
KeyDataCallback
?
onKeyData
=
_onKeyData
;
if
(
onKeyData
!=
null
)
{
invoke
(
()
=>
callback
(
onKeyData
(
data
)),
_onKeyDataZone
,
);
}
else
{
callback
(
false
);
}
}
/// A callback that is invoked to report the [FrameTiming] of recently
...
...
lib/web_ui/test/engine/window_test.dart
浏览文件 @
b86bc246
...
...
@@ -13,6 +13,9 @@ import 'package:test/test.dart';
import
'package:ui/ui.dart'
as
ui
;
import
'package:ui/src/engine.dart'
;
const
int
kPhysicalKeyA
=
0x00070004
;
const
int
kLogicalKeyA
=
0x00000000061
;
void
main
(
)
{
internalBootstrapBrowserTest
(()
=>
testMain
);
}
...
...
@@ -146,6 +149,52 @@ void testMain() {
EnginePlatformDispatcher
.
instance
.
invokeOnPointerDataPacket
(
null
);
});
test
(
'invokeOnKeyData returns normally when onKeyData is null'
,
()
{
final
ui
.
KeyData
keyData
=
ui
.
KeyData
(
timeStamp:
Duration
(
milliseconds:
1
),
type:
ui
.
KeyEventType
.
repeat
,
physical:
kPhysicalKeyA
,
logical:
kLogicalKeyA
,
character:
'a'
,
synthesized:
true
,
);
expect
(()
{
EnginePlatformDispatcher
.
instance
.
invokeOnKeyData
(
keyData
,
(
bool
result
)
{
expect
(
result
,
isFalse
);
});
},
returnsNormally
);
});
test
(
'onKeyData preserves the zone'
,
()
{
final
Zone
innerZone
=
Zone
.
current
.
fork
();
innerZone
.
runGuarded
(()
{
final
ui
.
KeyDataCallback
onKeyData
=
(
_
)
{
expect
(
Zone
.
current
,
innerZone
);
return
false
;
};
window
.
onKeyData
=
onKeyData
;
// Test that the getter returns the exact same onKeyData, e.g. it doesn't
// wrap it.
expect
(
window
.
onKeyData
,
same
(
onKeyData
));
});
final
ui
.
KeyData
keyData
=
ui
.
KeyData
(
timeStamp:
Duration
(
milliseconds:
1
),
type:
ui
.
KeyEventType
.
repeat
,
physical:
kPhysicalKeyA
,
logical:
kLogicalKeyA
,
character:
'a'
,
synthesized:
true
,
);
EnginePlatformDispatcher
.
instance
.
invokeOnKeyData
(
keyData
,
(
bool
result
)
{
expect
(
result
,
isFalse
);
});
window
.
onKeyData
=
null
;
});
test
(
'onSemanticsEnabledChanged preserves the zone'
,
()
{
final
Zone
innerZone
=
Zone
.
current
.
fork
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录