如何在Flutter中的Stack Widget中添加Multiple Floating按钮

Mag*_*ian 2 stack widget dart flutter

使用Stack Widget在另一个视图中查看一个视图.它工作正常.现在我需要在屏幕底部左右两侧添加两个浮动按钮.我在右侧添加了一个按钮,但我不知道如何在左侧添加浮动按钮.简单如下图.

在此输入图像描述

任何帮助都会很明显

cre*_*not 12

您可以使用Align小工具来定位你FloatingActionButtonStack.

Stack(
  children: <Widget>[
    Align(
      alignment: Alignment.bottomLeft,
      child: FloatingActionButton(...),
    ),
    Align(
      alignment: Alignment.bottomRight,
      child: FloatingActionButton(...),
    ),
  ],
)
Run Code Online (Sandbox Code Playgroud)

一个按钮分别Alignment.bottomLeft对其alignment属性和另一个按钮使用常量Alignment.bottomRight.

  • 根据本文:https://medium.com/@kaendagger/test-cef30fcb5c54,我必须确保为每个浮动操作按钮设置“heroTag:null”。否则,您会看到黑屏。 (6认同)
  • 要解决“左对齐超出屏幕”问题,请将 `floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked` 添加到 Scaffold (4认同)
  • 但是我的左对齐离开屏幕了吗? (2认同)

Nai*_*hhi 11

不要忘记为每个浮动操作按钮设置“heroTag: null”。否则会黑屏!

Stack(
  children: <Widget>[
    Align(
      alignment: Alignment.bottomLeft,
      child: FloatingActionButton(
                heroTag: null,
             ...),
    ),
    Align(
      alignment: Alignment.bottomRight,
      child: FloatingActionButton(
                heroTag: null,
             ...),
    ),
  ],
)
Run Code Online (Sandbox Code Playgroud)


小智 9

  floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
  floatingActionButton: Container(
    padding: EdgeInsets.symmetric(vertical: 0, horizontal: 10.0),
    child: Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: <Widget>[
        FloatingActionButton(
          onPressed: _someBackMethod,
          child: Icon(Icons.arrow_back),
        ),
        FloatingActionButton(
          onPressed: _someForwardMethod,
          child: Icon(Icons.arrow_forward),
        ),
      ],
    ),
  ),
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这就是最好的答案!是否也可以在 BottomAppBar 中对按钮进行刻痕? (2认同)

小智 8

floatingActionButton: Stack(
      children: <Widget>[
        Padding(padding: EdgeInsets.only(left:31),
        child: Align(
          alignment: Alignment.bottomLeft,
          child: FloatingActionButton(
            onPressed: picker,
            child: Icon(Icons.camera_alt),),
        ),),

        Align(
          alignment: Alignment.bottomRight,
          child: FloatingActionButton(
            onPressed: picker2,
          child: Icon(Icons.add_photo_alternate),),
        ),
      ],
    )
Run Code Online (Sandbox Code Playgroud)

  • 这个答案的格式确实需要整理一下。还请考虑添加一些评论来描述您的答案,特别是突出显示哪些部分解决了所描述的问题。 (2认同)

小智 8

您也可以将location用作centerDocked来使用类似的方法,以免出现奇怪的左对齐。

floatingActionButtonLocation:
              FloatingActionButtonLocation.centerDocked,
          floatingActionButton: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: <Widget>[
                FloatingActionButton(
                  onPressed: () {},
                  child: Icon(Icons.navigate_before),
                ),
                FloatingActionButton(
                  onPressed: () {},
                  child: Icon(Icons.navigate_next),
                )
              ],
            ),
          )
Run Code Online (Sandbox Code Playgroud)


iDe*_*ode 7

Scaffold(
  floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
  floatingActionButton: Padding(
    padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 12),
    child: Row(
      children: [
        FloatingActionButton(
          onPressed: () {},
          backgroundColor: Colors.red,
          child: Icon(Icons.remove),
        ),
        Spacer(),
        FloatingActionButton(
          onPressed: () {},
          child: Icon(Icons.add),
        ),
      ],
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述