我正在构建一个应用程序,其中包含我用自己的自定义按钮制作的floatactionbutton,按下该按钮时,它下面会显示3个菜单图标。
有两个问题
- 当方向更改为横向时,我们按floatactionbutton不会显示,而是长按时会显示,继续2
- 在目前的情况下,它像我在No.1中所说的那样长按显示,当我们再次回到potrait时,它需要再次长按才能显示
我一直在尝试一些方法来修复它,但仍然无法正常工作
这是代码和屏幕截图
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
非常感谢可以帮助它的人
发生这种情况是因为每次更改方向时,您的FloatingActionButton都会重建并丢失状态。
您应该找到一种保存FabIcons小部件状态的方法。
简单的解决方案:
使用以下方法构造FabIcons小部件
These variables should be saved in the Parent Widget, so every time you call
_buildMenu(context);
you pass in those variables