Flutter 如何以编程方式打开键盘文本字段
您好,我想知道是否有可能在颤振程序打开键盘,以及有光标和文本字段准备直接键入 我已经知道怎么拉键盘了Flutter 如何以编程方式打开键盘文本字段,flutter,dart,Flutter,Dart,您好,我想知道是否有可能在颤振程序打开键盘,以及有光标和文本字段准备直接键入 我已经知道怎么拉键盘了 FocusScope.of(context.requestFocus(FocusNode()) 但我还需要知道如何让textfield随时可以输入,而不需要用户点击textfield。 如 假设我有一个文本字段: TextField( controller: textEditingController, ); 我想使用下面的代码,这样用户就不必点击文本字段 textEditingContr
FocusScope.of(context.requestFocus(FocusNode())代码>
但我还需要知道如何让textfield随时可以输入,而不需要用户点击textfield。
如
假设我有一个文本字段:
TextField(
controller: textEditingController,
);
我想使用下面的代码,这样用户就不必点击文本字段
textEditingController.openTextField()//Pseudo code
TextField(
...
focusNode:_focusNode,
...
);
:编辑-----------------------------------
我有点不好,但是我忘了在textfield上添加focus节点作为参数
textEditingController.openTextField()//Pseudo code
TextField(
...
focusNode:_focusNode,
...
);
在你的班级中添加
最终焦点节点_FocusNode=FocusNode()
然后添加到文本字段
textEditingController.openTextField()//Pseudo code
TextField(
...
focusNode:_focusNode,
...
);
然后通过运行来调用它
_focusNode.requestFocus();
首先,您需要定义FocusNode变量并将其分配给TextField,如下所示:
//in header class
FocusNode focusNode = FocusNode ();
//in build method
TextField(focusNode: focusNode,)
然后使用以下代码:
FocusScope.of(context).requestFocus(focusNode);
下面是完整的代码,该代码使TextField
聚焦并打开键盘
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) => MaterialApp(home: HomeScreen());
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final TextEditingController _controller = TextEditingController();
final FocusNode _focusNode = FocusNode();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_focusNode.requestFocus();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: TextField(
focusNode: _focusNode,
controller: _controller,
),
);
}
@override
void dispose() {
_focusNode.dispose();
_controller.dispose();
super.dispose();
}
}
导入“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
void main()=>runApp(App());
类应用程序扩展了无状态小部件{
@凌驾
小部件构建(BuildContext上下文)=>MaterialApp(主页:HomeScreen());
}
类主屏幕扩展StatefulWidget{
@凌驾
_HomeScreenState createState()=>\u HomeScreenState();
}
类_homescrenstate扩展状态{
最终文本编辑控制器_控制器=文本编辑控制器();
最终焦点节点_FocusNode=FocusNode();
@凌驾
void initState(){
super.initState();
WidgetsBinding.instance.addPostFrameCallback((){
_focusNode.requestFocus();
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:TextField(
focusNode:_focusNode,
控制器:_控制器,
),
);
}
@凌驾
无效处置(){
_focusNode.dispose();
_controller.dispose();
super.dispose();
}
}
StatefulWidget
将前来救援WidgetsBinding
haveaddPostFrameCallback()
方法,该方法将在小部件Build()
生成后调用。所以在initState()
中,我们可以用它变魔术
与nextFocus:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).nextFocus();
});
}
Scaffold(
appBar: AppBar(),
body: TextField(),
),
FocusNode focusNode = FocusNode();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).requestFocus(focusNode);
});
}
Scaffold(
appBar: AppBar(),
body: TextField(
focusNode: focusNode,
),
),
文本字段代码:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).nextFocus();
});
}
Scaffold(
appBar: AppBar(),
body: TextField(),
),
FocusNode focusNode = FocusNode();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).requestFocus(focusNode);
});
}
Scaffold(
appBar: AppBar(),
body: TextField(
focusNode: focusNode,
),
),
带焦点节点:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).nextFocus();
});
}
Scaffold(
appBar: AppBar(),
body: TextField(),
),
FocusNode focusNode = FocusNode();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).requestFocus(focusNode);
});
}
Scaffold(
appBar: AppBar(),
body: TextField(
focusNode: focusNode,
),
),
使用:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).nextFocus();
});
}
Scaffold(
appBar: AppBar(),
body: TextField(),
),
FocusNode focusNode = FocusNode();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).requestFocus(focusNode);
});
}
Scaffold(
appBar: AppBar(),
body: TextField(
focusNode: focusNode,
),
),
输出:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).nextFocus();
});
}
Scaffold(
appBar: AppBar(),
body: TextField(),
),
FocusNode focusNode = FocusNode();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
FocusScope.of(context).requestFocus(focusNode);
});
}
Scaffold(
appBar: AppBar(),
body: TextField(
focusNode: focusNode,
),
),
您好,我想知道您是否可以看看我在帖子上的编辑,看看我的解释是否更清楚。我的目标是让用户无需点击文本字段即可输入文本。您可以在需要的地方使用此代码,例如,在计时器后或打开页面时,等,但用户仍然必须点击文本字段,即使键盘可以输入文本。您是否可以缩短答案,使其基本上说,记住将焦点节点添加到您的文本字段参数中,这样就没有完整的示例