Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何以编程方式打开键盘文本字段_Flutter_Dart - Fatal编程技术网

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
have
addPostFrameCallback()
方法,该方法将在小部件
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,
        ),
      ),

您好,我想知道您是否可以看看我在帖子上的编辑,看看我的解释是否更清楚。我的目标是让用户无需点击文本字段即可输入文本。您可以在需要的地方使用此代码,例如,在计时器后或打开页面时,等,但用户仍然必须点击文本字段,即使键盘可以输入文本。您是否可以缩短答案,使其基本上说,记住将焦点节点添加到您的文本字段参数中,这样就没有完整的示例