我使用Linkable来突出显示用户在文本字段中键入的网页链接、电话号码和电子邮件地址。第一个问题是可链接文件不接收文本字段,它只接收文本。所以,我的解决方案是只在用户键入时显示TextField,而在用户不键入时将TextField替换为用户键入的Text。第二个问题是,无论何时文本字段可见,起初它都不会显示键盘或光标,即使我可以验证它的焦点是否正确。如何在每次弹出文本字段时显示光标?我甚至将showcursor设置为true,但它仍然不起作用。在另一篇帖子中,我读到使用延迟计时器可以解决问题,所以我这样做了,但仍然不起作用。
FocusNode _focusNode = FocusNode();
@override
Widget build(BuildContext context) {
...
return GestureDetector(
onTap: () {
FocusNode currentFocus = FocusScope.of(context);
if (currentFocus.hasFocus) {
currentFocus.unfocus();
}
},
child: Column(
children: <Widget>[
Visibility(
visible: _focusNode.hasFocus,
child: TextField(
focusNode: _focusNode,
showCursor: true,
controller: _contentTextController,
),
InkWell(
child: Linkable(
text: "testing",
onTap: () async {
FocusScope.of(context).requestFocus(_focusNode);
// FocusScope.of(context).requestFocus(_focusNode);
// Timer(const Duration(milliseconds: 1000), () {
// FocusScope.of(context).requestFocus(_focusNode);
// _focusNode.requestFocus();
// });
await Future.delayed(
Duration(milliseconds: 10)
);
Timer(const Duration(milliseconds: 10), () {
setState(() {
print(_focusNode.hasPrimaryFocus);
//showTextEditor = !showTextEditor;
});
});
}
),
],
这是我的密码。
我遇到了同样的问题。我尝试过的一个解决问题的方法是
Future.delayed(const Duration(milliseconds: 10), () {
focusNode.requestFocus();
});
换句话说,在请求聚焦之前放置一个小延迟。希望能帮助