【发布时间】:2021-12-12 07:48:33
【问题描述】:
Flutter 新手。我有一个键盘监听器包裹着我的 Scaffold 主体以检测 Enter 和退格键。
但是我注意到:在每次页面刷新时,都会有额外的侦听器导致事件的双重触发。即在侦听器中触发的增量函数将加倍
- 第一次打开:每 1 次“输入”键:1 计数
- 刷新:每 1 次“输入”键:2 计数
- 再次刷新:每 1 次“输入”键:4 计数
- 再次刷新:每 1 次“输入”键:8 计数
我必须关闭浏览器并重新打开页面才能返回初始状态。
这里发生了什么?有什么最好的方法来解决这个问题?
我的代码(选定的相关部分):
class MyHomePageState extends State<MyHomePage> {
static int counter = 0;
void _incrementCounter() {
setState(() {
counter++;
});
}
void _decrementCounter() {
setState(() {
if (counter > 0) {
counter--;
}
});
}
。 . .
@override
Widget build(BuildContext context) {
return Scaffold(
bottomSheet: Container(
padding: EdgeInsets.all(5.0),
child: Text(
'Some text',
style: const TextStyle(
fontSize: 12.0,
),
textAlign: TextAlign.center,
),
),
body: RawKeyboardListener(
focusNode: FocusNode(),
onKey: (RawKeyEvent event) {
if (event.isKeyPressed(LogicalKeyboardKey.enter) ||
event.isKeyPressed(LogicalKeyboardKey.numpadEnter)) {
_incrementCounter();
}
if (event.isKeyPressed(LogicalKeyboardKey.backspace)) {
_decrementCounter();
}
},
autofocus: true,
child: Stack(
alignment: Alignment.center,
children: <Widget>[
Container(
decoration: const BoxDecoration(.......
提前致谢!
【问题讨论】:
标签: flutter keylistener