Flutter , IconButton 在使用对齐或边距或填充时不起作用

Adn*_*ali 3 android padding flutter

 appBar: new AppBar(
      leading: Stack(
        children: <Widget>[
          IconButton(
            icon: const Icon(Icons.arrow_forward),
            onPressed: () {
              _nextPage(1);
            },
            tooltip: 'Next',
            padding: EdgeInsets.only(left: 360.0),
          ),
          IconButton(
            icon: const Icon(Icons.arrow_back),
            onPressed: () {
              _nextPage(-1);
            },
            tooltip: 'Previous',
          ),
        ],
      ),
     ),
Run Code Online (Sandbox Code Playgroud)

块引用

两个 IconButtons ,第一个不起作用,但第二个起作用,当您删除填充时它工作正常,我应该怎么做?,而使用容器也无济于事,因为它们也占用空间,那该怎么办?

die*_*per 5

你那里有很多错误。

首先, 您使用的是Stack, stack 会将您的小部件放在另一个之上,因此您必须使用Positioned或指定位置Align

其次, 如果您查看源代码,您会发现leadingWidget有宽度限制。

if (leading != null) {
  leading = new ConstrainedBox(
    constraints: const BoxConstraints.tightFor(width: _kLeadingWidth),
    child: leading,
  );
}
Run Code Online (Sandbox Code Playgroud)

其中 _kLeadingWidth = 56

第一个解决方案

StackRow部件替换你的小部件,如果你这样做,你会得到一个溢出异常,因为你两个的大小IconButtons超过了宽度> 56。

最终解决方案(您可以找到更多信息)

取下IconButton并使用IconInkWell 包裹的(为了接收水龙头)

      return Scaffold(
        appBar: new AppBar(
          leading: Row(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[
              InkWell(
                  onTap: () => print("1"),
                  child: Padding(
                      padding: EdgeInsets.all(2.0),
                      child: const Icon(Icons.arrow_forward))),
              InkWell(
                  onTap: () => print("2"),
                  child: Padding(
                      padding: EdgeInsets.all(2.0),
                      child: const Icon(Icons.arrow_back))),
            ],
          ),
        ),
      );
Run Code Online (Sandbox Code Playgroud)