大家晚上好,我正在try 创建共享浮动标签类型UX,但我在做正确的事情时遇到了很多问题.以下是我try 过的一些东西,但我无法释怀;

 Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 10.0),
      child: TextField(
        style: const TextStyle(height: 1.25),
        decoration: InputDecoration(
          contentPadding: const EdgeInsets.symmetric(
            horizontal: 14.0,
            vertical: 20.0,
          ),
          focusedBorder: OutlineInputBorder(
            borderRadius: BorderRadius.circular(12),
            borderSide: const BorderSide(
              width: 3.0,
              color: Colors.black,
            ),
          ),
          label: Container(
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(12),
              color: Colors.transparent,
            ),
            padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 14),
            child: Text(
              widget.textFieldLabel,
              style: const TextStyle(
                fontSize: 16,
                fontWeight: FontWeight.w500,
              ),
            ),
          ),
          labelStyle: const TextStyle(
            color: Colors.grey,
          ),
          floatingLabelStyle: const TextStyle(
            color: Colors.white,
          ),
          enabledBorder: OutlineInputBorder(
            borderRadius: BorderRadius.circular(12),
            borderSide: BorderSide(
              width: 2.0,
              color: Colors.grey.shade400,
            ),
          ),
        ),
      ),
    );
  }

作为Flutter 翼的初学者,我已经try 了所有的方法,在过go 的两天里一直被困在这一点上.下面是codesen url:https://codepen.io/JonLehman/pen/JjYZVwO

任何帮助都将不胜感激.

推荐答案

你基本上已经在那里了.假设您使用的是StatefulWidget,因为您需要更新状态,因此添加一个变量来跟踪您的焦点:

bool isFocused = false

然后,将您的TextField封装在Focus小部件中,如下所示:

bool isFocused = false;
Widget build(BuildContext context) {
  return Padding(
    padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 10.0),
    child: Focus(
      child: TextField(
        style: const TextStyle(height: 1.25),
        decoration: InputDecoration(
          contentPadding: ...
          focusedBorder: ...
          label: Container(
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(12),
              color: isFocused ? Colors.black : Colors.transparent), // Changed here
            padding: ...
            child: Text(...),
          ),
          ...
        ),
      ),
      onFocusChange: (hasFocus) {
        if (hasFocus) {
          setState(() => isFocused = true);
        } else {
          setState(() => isFocused = false);
        }
      },
    ),
  ),
}

这样,当它没有被聚焦时,文本将有一个透明的背景,但一旦你将焦点放在它上,它就会变成黑色背景.

下面是它看起来的样子:

Example gif

Html相关问答推荐

restrict. form—text width to input s width'

将多个内联元素置于中心,而无需访问父级上的CSS

需要帮助创建一个简单的html css网格布局

如果DIV没有特定的sibling 姐妹,则以CSS为目标

<nav和button是姐妹元素.当添加了导航活动类时,我如何为按钮编写CSS?

如何生成随机字符串的字母数字字符集长度到html跨度?

与窗高匹配的响应式正方形网格

如果您将带有 html 标签的字符串数据(name : test) 放在 `

在 laravel 中使用 DomPDF 将数据导出为 pdf 时,第二列被拉伸

主要元素内滚动时,固定导航栏会消失

CSS 字母间距将按钮向右扩展

为什么每当我调整图片大小时它都会使我的其他元素移动

将图像的高度限制为固定的纵横比,并在超过时使用 object-fit

XPATH Select h2标签和

标签之间或h2标签和 标签之间的td元素,以立即为准

如何将图像移动到父容器的右侧?

防止按钮溢出到新行

如何在没有 JS 的情况下创建带搜索的 Select 菜单

当另一个 div 的高度改变或执行其内容的换行时,将 flex 方向更改为列

如何使用 :hover zoom 重叠图像?

根据正则表达式 attr 从 read_html 过滤表格