Flutter 如何在条件下查看浮动操作按钮

Flutter 如何在条件下查看浮动操作按钮,flutter,Flutter,我有订单清单。如果该选项为空,则FloatingActionButton为隐藏。如果订单列表中有产品,将显示FAB。我的代码: bool statusFAB = false; _getFABState(){ setState(() { if(!orderList.isEmpty){ statusFAB = true; } }); } @override W

我有订单清单。如果该选项为空,则FloatingActionButton为隐藏。如果订单列表中有产品,将显示FAB。我的代码:

bool statusFAB = false;   

_getFABState(){
        setState(() {
          if(!orderList.isEmpty){
            statusFAB = true;
          }
        });
      }

      @override
      Widget build(BuildContext context) {
        return Scaffold(
          floatingActionButton: _getFAB(),
          backgroundColor: _kAppBackgroundColor,
          body: Builder(
            builder: _buildBody,
          ),
        );

      Widget _getFAB() {
        if(statusFAB){
          return FloatingActionButton(
              backgroundColor: Colors.deepOrange[800],
              child: Icon(Icons.add_shopping_cart),
              onPressed: null);
        }
      }

它不起作用,因为条件只起一次作用,但订单列表的状态可以随时更改。

您不需要存储
statusFAB
变量,只需动态计算即可。见下面更新的示例:

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: _getFAB(),
      backgroundColor: _kAppBackgroundColor,
      body: Builder(
        builder: _buildBody,
      ),
    );

  Widget _getFAB() {
    if (orderList.isEmpty) {
      return Container();
    } else {
      return FloatingActionButton(
          backgroundColor: Colors.deepOrange[800],
          child: Icon(Icons.add_shopping_cart),
          onPressed: null);
    }
  }
导入“包装:颤振/材料.省道”;
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
标题:“颤振演示”,
主题:新主题数据(
主样本:颜色。蓝色,
),
主页:新MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
List orderList=List();
int计数器=0;
void getCount(){
设置状态(){
计数器=orderList.length;
});
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(widget.title),
),
正文:中(
子:容器(
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
图标按钮(
已按下:(){
if(orderList.isNotEmpty)
orderList.removeLast();
getCount();
},
图标:图标(图标。删除),
颜色:颜色,红色,
),
文本(“$counter”),
图标按钮(
已按下:(){
订单列表。添加(产品(‘产品’);
getCount();
打印(“添加产品”);
},
图标:图标(Icons.add),
颜色:颜色,蓝色,
)
],
),
),
),
浮动操作按钮:_getFAB()
);
}
小部件_getFAB(){
if(orderList.isEmpty){
返回容器();
}否则{
返回浮动操作按钮(
背景颜色:颜色。深橙色[800],
子:图标(图标。购物车),
onPressed:空);
}  }
}
类产品{
字符串标题;
产品(本名称);
}

有一个快捷方式可以与三元运算符一起使用,并且可以在有状态小部件的框架中使用,如

floatingActionButton: orderList.isEmpty ? Container() : FloatingActionButton(...)
除非您需要一个长而复杂的函数,否则它可以正常工作。即使需要复杂的函数,也只能在需要图形时调用该函数

floatingActionButton: orderList.isEmpty ? Container() : ComplicatedFn(...)

Widget ComplicatedFn() {
     //.... Complicated Algo
     return FloatingActionButton(...)
}

您需要在父窗口小部件上调用
setState()
,以调用
build
。请在代码中添加更多上下文。目前还不清楚上面的代码包含哪些小部件,以及您希望重新评估条件的原因。这是完整的代码,代码应该减少到最低限度的复制。要点中包含了大量与问题完全无关的代码,几乎没有人愿意花时间来找出哪些代码是相关的,哪些代码不是相关的。我同意,所以我展示了最小的代码。如果你展示任何抽象的例子,有多少可能在条件下展示FAB?
floatingActionButton: orderList.isEmpty ? Container() : ComplicatedFn(...)

Widget ComplicatedFn() {
     //.... Complicated Algo
     return FloatingActionButton(...)
}