【问题标题】:Flutter RequestNodeFlutter 请求节点
【发布时间】:2020-09-22 04:58:01
【问题描述】:

最近几天我尝试实施我在 stackoverflow 上找到的修复程序,但它们都不起作用。我认为这是不正常的故事情节造成的:

  • 我有一个带有文本字段的屏幕
  • 通过单击 FloatingActionButton 会出现一个弹出窗口,用户可以在其中单击按钮
  • 通过单击按钮,我将 bool 设置为 true(例如:textfield1 = true)
  • 这会在我的屏幕上触发一个 TextField ( if (textfield1== true) {TextField()} 这一切都很好,问题是,我想改变对这个新 TextField 的关注:

所以我添加了这个:

textfield1=true; _focusTextField1();

void _focusTextField1() { FocusScope.of(context).requestFocus(textfield1Node);}

现在 TextField 有了焦点(边框变为蓝色),但 textmarker 没有出现(我希望 textmarker 是正确的词,我的意思是这个“|”也会触发键盘。) 我必须单击按钮(FloatingActionButton--> Popup-->Button)两次,才能触发此文本标记/键盘。 比我找到这个解决方案:

   void initState() {
super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) => _focusTextField1());

这也行不通。下一个问题是,我必须为用户可以创建的每个可能的新 TextField 实现这个addPostFrameCallback,但是在addPostFrameCallback 的描述中,它说只有最后一个回调会被触发,意思是:每次我创建一个新的 TextField,在 initState() 中具有最后一个回调的 TextField 将被聚焦。

感谢您的帮助! (我提供了所有相关代码,我想如果我提供所有代码会很混乱)

【问题讨论】:

  • 我理解正确吗,您想在initState() 中调用_focusTextField1() 但不起作用
  • @MohamedSayed 不。当用户单击同时设置textField1=true 的按钮时,我调用_fcousTextField1() / 创建新的TextField。因为这种聚焦新 TextField 的方法不起作用,所以我找到了在 initState 中调用 WidgetsBinding.instance.addPostFrameCallback((_) => _focusTextField1()); 的方法

标签: flutter flutter-layout textfield


【解决方案1】:

我认为你需要的是 FocusNode:

https://flutter.dev/docs/cookbook/forms/focus

你可以创造:

  FocusNode myFocusNode;

  @override
  void initState() {
    super.initState();

    myFocusNode = FocusNode();
  }

并将其添加到您的 TextField:

  TextField(
    focusNode: myFocusNode,
  ),

所以,当您需要请求焦点时,请致电:myFocusNode.requestFocus()

【讨论】:

  • 我这样做了:void _focusTextField1() { FocusScope.of(context).requestFocus(textfield1Node);}(当然我在我的代码中添加了textfield1Node = FocusNode();focusNode: textfield1Node
  • 对不起!你是对的myfocusNode.requestFocus() 解决了这个问题。我以为FocusScope.of(context).requestFocus(textfield1Node); 也会这样做...谢谢!
猜你喜欢
  • 2017-08-09
  • 2017-08-19
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多