Flutter TextField:如何在右侧添加图标

Posted

技术标签:

【中文标题】Flutter TextField:如何在右侧添加图标【英文标题】:Flutter TextField: How add icon in right 【发布时间】:2021-03-14 20:54:23 【问题描述】:

在 TextField 小部件的 InputDecoration 部分中,只有左侧的图标可用(我的意思是在文本字段之外没有后缀)

如何在右侧 TextField 中添加图标?

使用 Row 是另一个问题:

 body: Column(
        children: [
          Expanded(
            child: ListView(
              children: [
                Text("Hi")
              ],
            ),
          ),
          Expanded(
              child: Row(
            children: [
              TextField(
                style: TextStyle(
                  backgroundColor: Color.fromRGBO(118, 118, 128, 0.35),
                ),
                decoration: InputDecoration(
                  hintText: "Message",
                  filled: true,
                  fillColor: Color.fromRGBO(235, 235, 245, 0.6),
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(15),
                  ),
                ),
              ),
            ],
          )),
        ],
      ),

【问题讨论】:

【参考方案1】:

您可以创建自定义文本字段,如下代码:

Container(
          child: Row(
        children: [Flexible(child: TextField()), Icon(Icons.add)],
      )),

【讨论】:

谢谢。我知道。但请参阅我的第 2 部分问题。我无法使用 Row。它给我错误【参考方案2】:

为什么首先需要Expanded?但如果是必须的,我认为你可以这样做:

return Scaffold(
  body: Column(
    children: [
      Expanded(
        child: ListView(
          children: [
            Text("Hi")
          ],
        ),
      ),
      Expanded(
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            Container(
              width: MediaQuery.of(context).size.width - 50,
              height: 35,
              child: TextField(
                style: TextStyle(
                  backgroundColor: Color.fromRGBO(118, 118, 128, 0.35),
                ),
                decoration: InputDecoration(
                  hintText: "Message",
                  filled: true,
                  fillColor: Color.fromRGBO(235, 235, 245, 0.6),
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(15),
                  ),
                ),
              ),
            ),
            Icon(Icons.add_a_photo, size: 25)
          ],
        )
      ),
    ],
  ),
);

您的代码出错,因为 Textfield 需要大小。

【讨论】:

但是现在TextField 的大小是有限的,这不利于响应式设计。而且在不同的设备上看起来可能会有所不同。【参考方案3】:

这样做:

Row(
  children: [
    Flexible(
      child: TextField(
        style: TextStyle(
          backgroundColor: Color.fromRGBO(118, 118, 128, 0.35),
        ),
        decoration: InputDecoration(
          hintText: "Message",
          filled: true,
          fillColor: Color.fromRGBO(235, 235, 245, 0.6),
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(15),
          ),
        ),
      ),
    ),
    SizedBox(width: 10.0),
    Icon(Icons.settings),
  ],
),

需要用Flexible 小部件限制TextFieldFlexible 代表 TextField,就像 MainAxisSize.min 代表 Column

【讨论】:

它对我不起作用。bcs 我在列中使用 Expandad 它之所以有效,是因为它使用文本字段和图标创建行。 Yoy 只需 tweek 代码即可使用 Expanded/Flexible。 @nimanima ,我已经修复了代码。现在工作。

以上是关于Flutter TextField:如何在右侧添加图标的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何以编程方式添加 TextField 或 TextFormField

Flutter ListView 项目根据 TextField 中添加的数字进行更改

如何在 Flutter 的同一屏幕上沿 ListView 显示小部件?

使用 TextField Flutter 选择购物车数量

如何在flutter中获取TextField值

如何在 Flutter 的 TextField 中禁用预测文本?