我怎样才能在 Flutter 的 AppBar 中有可点击的文本

How can I have clickable text in the AppBar in Flutter

我知道我可以在 Flutter 的 AppBar 操作中使用 IconButton。但我希望用户看到的不是图标,而是 'Save' 或 'Back' 或 'Cancel' 并在 AppBar 中单击它们。我怎样才能做到这一点?这是我显示 AppBar 的代码的一部分。我想使用 'Save'

而不是保存图标
return Scaffold(
    appBar: AppBar(
      leading: IconButton(icon: Icon(Icons.arrow_back),
      tooltip: "Cancel and Return to List",
      onPressed: () {
        Navigator.pop(context, true);
      },
    ),
      automaticallyImplyLeading: false,
      title: Text(title),
      actions: <Widget>[

        IconButton(
          icon: Icon(Icons.save),
          tooltip: "Save Todo and Retrun to List",
          onPressed: () {
            save();
          },
        )
      ],
    ),//AppBar

使用TextButton:

appBar: AppBar(
  actions: <Widget>[
    TextButton(
      onPressed: () {},
      child: Text('Save'),
    ),
  ],
)

您可以在 AppBaractions 列表中使用 FlatButton

appBar: AppBar(
  title: Text("Test Screen"),
  actions: <Widget>[
    FlatButton(
      textColor: Colors.white,
      onPressed: () {},
      child: Text("Save"),
      shape: CircleBorder(side: BorderSide(color: Colors.transparent)),
    ),
  ],
),

onPressed 必须定义,否则按钮将显示为禁用。 另请注意,默认情况下,按钮的形状将为 InkWell 效果创建一个填充的矩形。通过将 shape 属性 设置为 CircleBorder,我们可以获得更好的按下状态效果。

例如

未按下:

按下:

如果你有短字符串,那么你可以将 Text 小部件代替 Icon 传递到 IconButton.icon 参数中:

IconButton(
  icon: Text(
    "Save",
    style: Theme.of(context).textTheme.button.apply(
      color: Theme.of(context).appBarTheme.actionsIconTheme.color,
    ),
  ),
  onPressed: _save,
),

不幸的是,它不适用于较长的文本,例如 取消

第二次来这个帖子找解决办法了。我实际上已经对一些我觉得有趣的答案投了赞成票。

@sosite 解决方案几乎是完美的,更改 iconSize 可以显示更长的文本。但是,它并不完美,因为按钮的飞溅半径会太大。

最好的方法是使用 constraints: BoxConstraints(width: ...)。它将模仿默认的 IconButton 的启动半径。

我们可以使用更大的文本、多世界文本并将文本居中对齐以完美对齐。

IconButton(
            constraints: BoxConstraints.expand(width: 80),
            icon: Text('CREATE GAME', textAlign: TextAlign.center),
            onPressed: () {},
          ),

如果文本被剪切,增加宽度值:)

使用新版本Flutter 2.0

appBar: AppBar(
  title: Text(""),
  actions: <Widget>[
    TextButton(
      textColor: Colors.white,
      onPressed: () {},
      child: Text(""),
      shape: CircleBorder(side: BorderSide(color: )),
    ),
  ],
),

您还可以通过在 Center 小部件

中使用 GestureDetector 小部件来实现此目的
   Center(
      child: GestureDetector(
        onTap: (){},
        child: Text(
          "Ssave",
          textScaleFactor: 1.5,
          style: TextStyle(
            fontSize: 12.0,
            color: Colors.white,
          ),
        ),
      ),
    )

关键是用Center把你的控件包裹起来,当控件最右边的时候给它一点space向右。里面有什么都不重要

AppBar(
      title: Text('The tile'),
      actions: [Center(
        child: Padding(
          padding: const EdgeInsets.fromLTRB(0,0,8,0),
          child: InkWell(
            onTap: (){},
            child: Text(
              'Send',
              textScaleFactor: 1.5,
              style: TextStyle(
                color: Colors.white,
              ),
            ),
          ),
        ),
      )],
    ),