点击标签小部件时如何关闭快速拨号?

How to close flutter speed dial when tap on a label widget?

有没有办法在点击 label 小部件时关闭抖动 speedDial?。我没有使用 SpeedDial 的 child 属性,但它有那个功能。目前,当我点击一个标签小部件时,它会一直停留到我手动关闭该小部件为止。甚至改变 SpeedDial 小部件的子 属性 的方法就足够了,而我想要一个像图片中那样的自定义形状。

Navigator.pop()  did not work

                      SpeedDial(
                                buttonSize: const Size(45, 45),
                                animatedIcon: AnimatedIcons.menu_close,
                                children: [
                                  SpeedDialChild(
                                    labelWidget: GestureDetector(
                                      onTap: () async {
                                        Feedback.forTap(context);
                                        await _crudStorage.deleteAllTask();
                                      },
                                      child: Container(
                                        height: 50.0,
                                        decoration: BoxDecoration(
                                          color:
                                              Theme.of(context).cardColor,
                                          border: Border.all(width: 2.0),
                                          borderRadius:
                                              BorderRadius.circular(30.0),
                                        ),
                                        child: Row(
                                          children: [
                                            const Padding(
                                              padding: EdgeInsets.only(
                                                  left: 12.0, right: 8.0),
                                              child:
                                                  Text('Clear all tasks'),
                                            ),
                                            Padding(
                                              padding:
                                                  const EdgeInsets.only(
                                                      right: 8.0),
                                              child: SvgPicture.asset(
                                                'assets/svg/all.svg',
                                              ),
                                            ),
                                          ],
                                        ),
                                      ),
                                    ),
                                  ),
                                ],
                              ) 

不要使用 async & await on tap 使用单独的函数来调用

https://tutorialmeta.com/question/how-to-call-async-function-with-ontap-flutter

参考上述link

原来如此简单。此外,开发团队在 pub.dev go to pub 的官方扩展页面上提供了如何实现这一点。我将提及相同的文档供您参考:

首先你需要创建一个值通知器:

ValueNotifier<bool> isDialOpen = ValueNotifier(false);

然后在您的 SpeedDial 中将 openCloseDial 设置为 isDialOpen:

SpeedDial(
  ...
  openCloseDial: isDialOpen,
  ...
)

现在可以更改拨号打开状态:

isDialOpen.value = false;

示例:只需在 onTap 回调中将值设置为 false :)

 onTap: () async {
                   Feedback.forTap(context);
                   await _crudStorage.deleteAllTask();
                   isDialOpen.value = false;
                 },