如何在 Flutter for web TextField 上触发 onSubmitted
How to trigger onSubmitted on a Flutter for web TextField
我有一个用于 web 的小型 flutter 应用程序,并且正在显示一个 TextField。
我现在需要一个类似 onSubmitted 的回调,每当用户离开 TextField(失去焦点)或按下 Enter 键时。现在我根本无法进行任何回调。
TextField(
decoration: InputDecoration(
labelText: 'Name',
),
controller: TextEditingController(text: event.name),
onEditingComplete: () { print("editing complete"); },
onSubmitted: (String value) { print("submitted\n"); },
maxLines: 1,
),
这似乎是一个问题:
[web]: TextField onSubmitted is not triggered when pressing enter
这是 link 中提到的解决方法:
body: RawKeyboardListener(
focusNode: focusNode,
onKey: (event) {
if (event is RawKeyUpEvent && event.data is RawKeyEventDataAndroid) {
var data = event.data as RawKeyEventDataAndroid;
if (data.keyCode == 13) {
debugPrint('onSubmitted');
}
}
},
child: TextField(),
),
这在 Flutter Web 上对我有用
TextField(
controller: _passwordController,
decoration: InputDecoration(
labelText: 'Password',
),
obscureText: true,
onSubmitted: (value) {
_loginPresenter.login(
_usernameController.text, _passwordController.text);
},
),
注意 onSubmitted
的定义。当用户在 flutter web 上按下 Enter 键时,loginPresenter.login
方法将被调用。
同时删除 maxLines: 1
似乎可以使 onsubmitted 正常工作。[在移动设备上遇到同样的问题]
您可以尝试创建一个方法,在其中对您的 TextEditingController 设置条件,并基于该条件在您的 TextField 上提交。
- 第一个
final entredTitle = titleController.text;
final entredAmount = double.parse(amountController.text);
if (entredTitle.isEmpty || entredAmount <= 0 ){
return ;
}
widget.addTx(entredTitle,entredAmount);
Navigator.of(context).pop();
}
- 第二
TextField(
decoration: InputDecoration(labelText: 'Amount'),
controller: amountController,
onSubmitted: (_) => submitData(),
),
我有一个用于 web 的小型 flutter 应用程序,并且正在显示一个 TextField。
我现在需要一个类似 onSubmitted 的回调,每当用户离开 TextField(失去焦点)或按下 Enter 键时。现在我根本无法进行任何回调。
TextField(
decoration: InputDecoration(
labelText: 'Name',
),
controller: TextEditingController(text: event.name),
onEditingComplete: () { print("editing complete"); },
onSubmitted: (String value) { print("submitted\n"); },
maxLines: 1,
),
这似乎是一个问题: [web]: TextField onSubmitted is not triggered when pressing enter
这是 link 中提到的解决方法:
body: RawKeyboardListener(
focusNode: focusNode,
onKey: (event) {
if (event is RawKeyUpEvent && event.data is RawKeyEventDataAndroid) {
var data = event.data as RawKeyEventDataAndroid;
if (data.keyCode == 13) {
debugPrint('onSubmitted');
}
}
},
child: TextField(),
),
这在 Flutter Web 上对我有用
TextField(
controller: _passwordController,
decoration: InputDecoration(
labelText: 'Password',
),
obscureText: true,
onSubmitted: (value) {
_loginPresenter.login(
_usernameController.text, _passwordController.text);
},
),
注意 onSubmitted
的定义。当用户在 flutter web 上按下 Enter 键时,loginPresenter.login
方法将被调用。
同时删除 maxLines: 1
似乎可以使 onsubmitted 正常工作。[在移动设备上遇到同样的问题]
您可以尝试创建一个方法,在其中对您的 TextEditingController 设置条件,并基于该条件在您的 TextField 上提交。
- 第一个
final entredTitle = titleController.text;
final entredAmount = double.parse(amountController.text);
if (entredTitle.isEmpty || entredAmount <= 0 ){
return ;
}
widget.addTx(entredTitle,entredAmount);
Navigator.of(context).pop();
}
- 第二
TextField(
decoration: InputDecoration(labelText: 'Amount'),
controller: amountController,
onSubmitted: (_) => submitData(),
),