将纵向更改为横向时丢失的浮动操作按钮状态

我正在构建一个应用程序,其中包含我用自己的自定义按钮制作的floatactionbutton,按下该按钮时,它下面会显示3个菜单图标。

有两个问题

  1. 当方向更改为横向时,我们按floatactionbutton不会显示,而是长按时会显示,继续2
  2. 在目前的情况下,它像我在No.1中所说的那样长按显示,当我们再次回到potrait时,它需要再次长按才能显示

我一直在尝试一些方法来修复它,但仍然无法正常工作

这是代码和屏幕截图

when potrait menu show up

when change to landscpae, menu icons is missing and need long press to make it show

对于floatActionButton

floatingActionButton: OrientationBuilder(
    builder: (BuildContext context, Orientation orientation){
       return orientation == Orientation.landscape
       ? _buildMenu(context)
       : _buildMenu(context);
    },
  ),

_buildMenu()调用floatActionButton

Widget _buildMenu(BuildContext context){
final icons = [ Icons.swap_vert, Icons.check_circle_outline, Icons.filter_list ];   
var nowOrientation = MediaQuery.of(context).orientation;

var b = Container(
  child: LayoutBuilder(
    builder: (BuildContext context, BoxConstraints constraints){
      return OverlayBuilder(
        showOverlayTrue: true,
        overlayBuild: (BuildContext overlayContext){
          RenderBox box = context.findRenderObject() as RenderBox;
          final center = box.size.center(box.localToGlobal(const Offset(0.8, 0.8)));

           return new Positioned(
            top: Offset(center.dx, center.dy - icons.length * 35.0).dy,
            left: Offset(center.dx, center.dy - icons.length * 35.0).dx,
            child: new FractionalTranslation(
              translation: const Offset(-0.5, -0.6),
              child: FabIcons(
                icons: icons,
              ),
            ),
          );
        },
      );
    },
  ),
);}

为了简化查看,我在github上做了一些代码

OverlayBuilder Class https://github.com/ubaidillahSriyudi/StackOverflowhelp/blob/master/OverlayBuilderClass

Fabicons Class https://github.com/ubaidillahSriyudi/StackOverflowhelp/blob/master/FabIcons

非常感谢可以帮助它的人

评论
hrerum
hrerum

发生这种情况是因为每次更改方向时,您的FloatingActionButton都会重建并丢失状态。

您应该找到一种保存FabIcons小部件状态的方法。

简单的解决方案:

使用以下方法构造FabIcons小部件

 icons,
 iconTapped; 

These variables should be saved in the Parent Widget, so every time you call _buildMenu(context); you pass in those variables

点赞
评论