目標:按下發送按鈕時,不要關閉鍵盤并保持打開/聚焦問題:按下發送按鈕時,鍵盤關閉,然后由于focusNode.requestFocus重新打開,之后按下發送按鈕時,鍵盤不再打開 尋找兩個選項:
- (理想)按下發送按鈕時不要讓鍵盤關閉
- (好的)無論發送按鈕關閉多少次都打開鍵盤
這是示例用戶界面:
return Form(
key: _formKey,
child: Row(
children: <Widget>[
Expanded(
child: TextFormField(
focusNode: chatController.focusNode,
// textInputAction: TextInputAction.none, // didn't help
// onEditingComplete: () {}, // didn't help
)
),
IconButton(
icon: const Icon(Icons.send),
onPressed: () async {
SystemChannels.textInput
.invokeMethod('TextInput.hide');
if (_formKey.currentState!.validate()) {
await chatController.sendMessage(context);
}
}
),
],
)
);
這是控制器:
late FocusNode focusNode;
@override
void onReady() async { // tried onInit as well
focusNode = FocusNode();
super.onReady();
}
void sendMessage(BuildContext context) async {
// focusNode.unfocus(); // didn't help
// focusNode2.requestFocus(); // tried to give focus to another widget and take it back, but didn't help
final a1 = focusNode.hasFocus; // except the very first call, this is true even when focusNode.unfocus() is called
// neither of these work the second time
focusNode.requestFocus();
// FocusScope.of(context).requestFocus(focusNode);
}
我能夠跟蹤代碼,并且當第二次呼叫此處的焦點管理器時,此條件始終為真:
if (hasPrimaryFocus && (_manager!._markedForFocus == null || _manager!._markedForFocus == this)) {
即使鍵盤已關閉,它也會回傳而不會再次嘗試打開鍵盤
uj5u.com熱心網友回復:
你有一個流浪者:
SystemChannels.textInput.invokeMethod('TextInput.hide');
在您的IconButton回呼中,它應該在洗掉后作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/533177.html
標籤:扑重点自动对焦
上一篇:如何為文本編輯控制器創建串列
