首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextField聚焦

TextField聚焦
EN

Stack Overflow用户
提问于 2021-11-24 15:30:10
回答 1查看 161关注 0票数 2

我有两个TextFields,我希望点击另一个小部件(按钮、容器、卡片)不会带走当前聚焦的TextField的焦点。我怎样才能获得关于哪个文本字段是当前焦点的信息?

代码语言:javascript
复制
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‘
  • ’有主焦点: false'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-24 16:55:57

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

代码语言:javascript
复制
 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!'),
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70098778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档