[Flutter]:只有一个底部标签的 FAB

[Flutter]: FAB for only one bottom tab

我有一个 BottomAppBar 有一个 FloatingActionButton。但是,我只希望在一个特定屏幕中看到此按钮。在最好的情况下,我只想在用户单击该特定屏幕时添加此按钮。

我发现您可以像这样添加 FAB

return Scaffold(
      extendBodyBehindAppBar: true,
      extendBody: true,
      floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ...
        },
        child:  const Icon(
          Icons.add_sharp,
          color: Color(0xFFFFFFFF),
        ),
      ),
      body: Center(
        child: _widgetOptions.elementAt(_selectedIndex),
      ),
      bottomNavigationBar: buildBottomNavigationBar(),
    );

但是,如您所见,此 ScaffoldbottomNavigationBar 中可以选择的所有屏幕共享。如何仅为特定屏幕添加 FAB

我希望将 FAB 嵌入到 bottomNavigationBar 中,因此我不想在该特定屏幕上添加普通按钮。谢谢。

在您的特定选项卡中使用 Stack 并在底部添加 FAB :

示例:

    Stack(
children[
    
    Container(height: double.infinity,
    width: double.infinity) // for full screen 
    
    Position(
    bottom : 10,
    left: 150,
    right : 150,
    child: FloatingActionButton(
            onPressed: () {
              ...
            },
            child:  const Icon(
              Icons.add_sharp,
              color: Color(0xFFFFFFFF),
            ),
          )
    )
    
    ])

再次用脚手架包裹特定屏幕,并仅在该屏幕上使用 fab。

事实证明,解决方案其实很简单,我想多了。我有一个变量可以跟踪当前打开的屏幕。所以我只是将这个小逻辑添加到托管 bottomNavigationBar:

的母屏幕
if (_selectedIndex==1){
  // Other screen that needs the FAB
  return Scaffold(
    ...,
    floatingActionButton: FloatingActionButton(
        ....
    ),
    bottomNavigationBar: buildBottomNavigationBar(),
  );
}

return Scaffold(
  ...,
  bottomNavigationBar: buildBottomNavigationBar(),
);