Android 如果列表为空,如何启用和禁用浮动操作按钮?

Android 如果列表为空,如何启用和禁用浮动操作按钮?,android,flutter,dart,Android,Flutter,Dart,我使用的是FloatingActionButton,正如您所看到的,如果列表的大小大于0,我希望它出现,当列表的大小为0时,它消失 我有一个视图,可以将项目添加到该列表中 但不幸的是,该脚本只执行一次,并且它不会始终侦听列表的大小 class EventDetailsPage extends StatelessWidget { final Event event; const EventDetailsPage({Key key, this.event}) : super(key: key

我使用的是FloatingActionButton,正如您所看到的,如果列表的大小大于0,我希望它出现,当列表的大小为0时,它消失 我有一个视图,可以将项目添加到该列表中 但不幸的是,该脚本只执行一次,并且它不会始终侦听列表的大小

class EventDetailsPage extends StatelessWidget {
  final Event event;
  const EventDetailsPage({Key key, this.event}) : super(key: key);
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      extendBodyBehindAppBar: true,
      body: Provider<Event>.value(
        value: event,
        child: Stack(
          fit: StackFit.expand,
          children: <Widget>[
            EventDetailsBackground(),
            EventDetailsContent(),
          ],
        ),
      ),

      floatingActionButton: new Visibility( 
        visible: qrList.length>0?true:false,
        child: new FloatingActionButton.extended(
          onPressed: (){
            qrList = qrList.toSet().toList();
          },
          label: Text('GENERAR QR',),
          backgroundColor: Colors.pink,
        ),     
      ),

    );
  }
}```
class EventDetailsPage扩展了无状态小部件{
最终事件;
const EventDetailsPage({Key-Key,this.event}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
extendedBodyBehindAppBar:true,
正文:Provider.value(
价值:事件,
子:堆栈(
fit:StackFit.expand,
儿童:[
EventDetailsBackground(),
EventDetailsContent(),
],
),
),
浮动操作按钮:新的可见性(
可见:qrList。长度>0?真:假,
子级:新的FloatingActionButton.extended(
已按下:(){
qrList=qrList.toSet().toList();
},
标签:文本('GENERAR QR',),
背景颜色:Colors.pink,
),     
),
);
}
}```

试试下面的方法,告诉我它是否有效

floatingActionButton: qrList.length>0 ? FloatingActionButton.extended(
      onPressed: (){
        qrList = qrList.toSet().toList();
      },
      label: Text('GENERAR QR',),
      backgroundColor: Colors.pink,
  ): SizedBox.shrink(),

尝试以下方法并让我知道它是否有效

floatingActionButton: qrList.length>0 ? FloatingActionButton.extended(
      onPressed: (){
        qrList = qrList.toSet().toList();
      },
      label: Text('GENERAR QR',),
      backgroundColor: Colors.pink,
  ): SizedBox.shrink(),

对于这种情况,您应该使用一些反应式state manage,看看getxpakage(),它有一些很好的方法来观察类似情况下列表中的更改

您也可以使用changeNotifier实现这一点,只需将列表放入扩展它的类中,并将浮动按钮放入消费者小部件中,每次列表添加/删除触发notifyListeners()的值。对于此aproach用户提供程序包()

使用getx包的示例:

class MyList扩展了GetxController{
最终qrList=List().obs;
}
//通过这种方式,您可以将其插入应用程序中,记住将其置于使用此列表的所有小部件之上
Get.put(MyList());
浮动操作按钮:Obx((){
final qrList=Get.find().qrList;
返回可见性(
可见:qrList.length>0?真:假,
子级:新的FloatingActionButton.extended(
已按下:(){
qrList=qrList.toSet().toList();
},
标签:文本(
“通用QR”,
),
背景颜色:Colors.pink,
));
});,

如果列表中有任何更改,按钮将更新。对于这种情况,您应该使用一些反应式状态管理,看看getx pacage()它有一些很好的方法来观察列表中的更改

您也可以使用changeNotifier实现这一点,只需将列表放入扩展它的类中,并将浮动按钮放入消费者小部件中,每次列表添加/删除触发notifyListeners()的值。对于此aproach用户提供程序包()

使用getx包的示例:

class MyList扩展了GetxController{
最终qrList=List().obs;
}
//通过这种方式,您可以将其插入应用程序中,记住将其置于使用此列表的所有小部件之上
Get.put(MyList());
浮动操作按钮:Obx((){
final qrList=Get.find().qrList;
返回可见性(
可见:qrList.length>0?真:假,
子级:新的FloatingActionButton.extended(
已按下:(){
qrList=qrList.toSet().toList();
},
标签:文本(
“通用QR”,
),
背景颜色:Colors.pink,
));
});,

如果列表中有任何更改,按钮将更新

尝试使用无状态Widget的StatefullWidget实例,您的代码中是否有从列表中删除元素的点?是,但在另一个视图中,我可以从列表中添加或删除元素。请共享其余的代码。尝试使用无状态Widget的StatefullWidget实例,您的代码中是否有从列表中删除元素的点?是的,但是在另一个视图中,我可以从列表中添加或删除元素。您可以共享其余的代码吗只执行一次,如果我更改了列表的长度,则不会侦听。您需要使用setState更新有状态小部件中qrList.length的值,您正在调用此特定无状态小部件。我可以添加setState,即添加或消除值的操作​​在列表中,我将其保存在另一个文件中,我无法命令他们使用setStateT更改状态false或true,但脚本“qrList.length>0”只执行一次,如果我更改了列表的长度,则不会侦听。您需要使用setState更新有状态小部件中qrList.length的值,您正在调用此特定无状态小部件。我可以添加setState,即添加或消除值的操作​​在列表中,我将其保存在另一个文件中,我无法命令他们使用setState更改状态false或true