【发布时间】:2021-11-12 03:08:40
【问题描述】:
编辑 我最终通过使用 AutomaticKeepAliveClientMixin 解决了这个问题,它允许我将小部件移出屏幕并保持状态。我仍然不清楚 Visibility.maintainSize:false 是如何工作的,但现在不急于理解。 结束编辑
我尝试通过单击屏幕在两个小部件(一个红色容器,一个蓝色容器)之间切换。我想要的行为是红色容器覆盖整个屏幕,然后单击,然后蓝色容器覆盖整个屏幕,依此类推。
我希望下面的代码能够实现这一点,因为我在 Visibility 上设置了 maintainSize=false。但是这不起作用,蓝色总是占屏幕高度的 50%,红色总是占 50%,与它们的可见性无关,我无法让可见的占 100%。
我想了解为什么 maintainSize 不能按我预期的方式工作(即,使用 maintainSize=false 我希望小部件的宽度/高度为 0,而另一个扩展为全屏)
由于这不起作用,我该怎么做才能获得想要的行为(不使用带有 if-case 的条件渲染,因为我希望保持渲染状态)
Widget _toggleWidget() => GestureDetector(
onTap: () {
if (redblue == 0)
setState(() => redblue = 1);
else if (redblue == 1) setState(() => redblue = 0);
},
child: Column(children: [
Expanded(
child: Visibility(
visible: (redblue == 0),
maintainSize: false,
maintainState: true,
child: Container(color: Colors.blue[600]),
),
),
Expanded(
child: Visibility(
visible: (redblue == 1),
maintainSize: false,
maintainState: true,
child: Container(color: Colors.red[600]),
),
)
]),
);
【问题讨论】:
标签: flutter dart flutter-layout flutter-widget