带有图标和文字的Flutter按钮看起来很奇怪

Ae *_*pek 2 flutter flutter-layout

我正在尝试创建一个Flutter应用程序,该应用程序具有一个带有文本和图标作为标签的按钮,该图标位于文本的右侧。这篇文章中描述的方法会产生一个看起来很奇怪的按钮,该按钮似乎扩展到了应用程序的宽度,请参见此图像(链接,因为我不允许附加图像):

当将行小部件添加为子级时,按钮变宽

我不清楚要使用哪些布局小部件来调整text + image按钮以将其格式化为纯文本按钮。

产生以上示例的代码:

Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(
              'You have pushed the button this many times:',
            ),
            new Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
            new RaisedButton(
              onPressed: _incrementCounter,
              child: new Row(
                children: <Widget>[
                  new Text("Button with text and icon!"),
                  new Icon(Icons.lightbulb_outline)
                ],
              ),
            ),
            new RaisedButton(
              onPressed: _incrementCounter,
              child: new Text("Button with only text")
              ),
          ],
        ),
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: new Icon(Icons.add),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

Ras*_*eed 7

你可以简单地使用这个 RaisedButton.icon

简单用法:

RaisedButton.icon(
   onPressed: () {},
   elevation: 2.0,
   shape: new RoundedRectangleBorder(
      borderRadius: new BorderRadius.circular(5.0),
   ),
   color: const Color(0xFFFFB822),
   icon: Icon(Icons.add_shopping_cart),
   label: Text("Add to Cart",
             style: TextStyle(
             fontWeight: FontWeight.w900,
    ),
  ),
)
Run Code Online (Sandbox Code Playgroud)


Vin*_*mar 6

行属性mainAxisSize: MainAxisSize.min在这里起到了作用。

@override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('Home'),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new RaisedButton(
              onPressed: () {},
              child: new Row(
                mainAxisAlignment: MainAxisAlignment.center,
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  new Text('Button with text and icon!'),
                  new Icon(Icons.lightbulb_outline),
                ],
              ),
            ),
            new RaisedButton(
              onPressed: () {},
              child: new Text('Button with only text'),
            )
          ],
        ),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)