RawKeyboardListener未在Flutter web中触发任何事件



这里是一些小部件中的简单代码。未触发RawKeyboardListeneronKey!那么问题是为什么呢?是虫子吗?

Container(
child: StreamProvider<Item>.value(
value: stream
child: Consumer<Item>(
builder: (_, item, __) {
return RawKeyboardListener(
focusNode: focusNode,
onKey: (event) {
print(event); // NOT PRINTED!!
}
child: TextField(
controller: controller,
...
),
);
}
),
),
),

第页。S.长笛是1.17.0-3.2pre,飞镖是2.8.0-dev.20.10

我认为您需要将这一行添加到构建器方法的顶部:

FocusScope.of(context).requestFocus(focusNode);

你的代码应该是这样的:

Container(
child: StreamProvider<Item>.value(
value: stream
child: Consumer<Item>(
builder: (_, item, __) {
FocusScope.of(context).requestFocus(focusNode); // Add this line
return RawKeyboardListener(
focusNode: focusNode,
onKey: (event) {
print(event); // NOT PRINTED!!
}
child: TextField(
controller: controller,
...
),
);
}
),
),
),

最后,我弄清楚了为什么键(尤其是Enter(没有被RawKeyboardListener捕获。需要添加onChange回调(用于捕获键盘事件(和空onEditingComplete回调(用于捕捉Enter键(。

RawKeyboardListener(
focusNode: focusNode,
onKey: (event) {
if (event.isKeyPressed(LogicalKeyboardKey.enter) {
print('enter key pressed'); // <--- works!
} else {
print('key ${event.logicalKey} pressed');
}
}
child: TextField(
controller: controller,
onChange: (value) { /* handle text change*/}
onEditingComplete: () { /* this is required to catch Enter key */ }
),
)

最新更新