【问题标题】:TextField - focusing文本字段 - 聚焦
【发布时间】:2021-11-24 15:30:10
【问题描述】:

我有两个 TextField,我希望单击另一个小部件(按钮、容器、卡片)不会带走当前焦点所在的 TextField 的焦点。我如何还可以获得有关当前关注哪个文本字段的信息?

Scaffold(
        body: Container(
            width: 250,
            child: Column(children: [
              TextField(
                focusNode: _focusNode,
                autofocus: true,
              ),
              TextField(
                focusNode: _secondFocusNode,
              ),
              Focus(
                  child: OutlinedButton(
                      onPressed: () {
                        debugPrint('Has Focus: ${_focusNode.hasFocus}');
                        debugPrint(
                            'Has Primary Focus: ${_focusNode.hasPrimaryFocus}');
                      },
                      child: Center(child: Text('Click me!'))))
            ])))

此外,当我专注于其中一个 TextField 时,我不知道为什么,但如果我点击按钮,我会得到:

  • '有焦点:假'
  • '具有主要焦点:false'

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以跟踪当前的activeFocuseNode 并使用onTap 选择TextFiled 上的值,然后再次调用FocusNode

     final List<FocusNode> _focusNodes = List.generate(2, (index) => FocusNode());
      int activeFocuseNode = -1;
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Container(
            width: 250,
            child: Column(
              children: [
                TextField(
                  focusNode: _focusNodes[0],
                  autofocus: true,
                  onTap: () {
                    setState(() {
                      activeFocuseNode = 0;
                    });
                  },
                ),
                TextField(
                  focusNode: _focusNodes[1],
                  onTap: () {
                    setState(() {
                      activeFocuseNode = 1;
                    });
                  },
                ),
                Focus(
                  child: OutlinedButton(
                    onPressed: () {
                      debugPrint('Has Focus: ${_focusNodes[0].hasFocus}');
                      debugPrint(
                          'Has Primary Focus: ${_focusNodes[1].hasPrimaryFocus}');
                      if (activeFocuseNode >= 0) {
                        FocusScope.of(context)
                            .requestFocus(_focusNodes[activeFocuseNode]);
                      }
                    },
                    child: const Center(
                      child: Text('Click me!'),
                    ),
                  ),
                )
              ],
            ),
          ),
        );
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 2015-09-04
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      相关资源
      最近更新 更多