Flutter 中显示隐藏组件的对比
2026-01-25 本文已影响0人
习惯了_就好
Flutter 中显示隐藏组件的对比
主要显示隐藏组件
1. Visibility 组件
Visibility(
visible: condition,
child: YourWidget(),
)
-
特点:通过
visible属性控制子组件的可见性 - 渲染行为:即使隐藏也会占用布局空间
- 性能:隐藏时仍会进行布局计算
2. Opacity 组件
Opacity(
opacity: condition ? 1.0 : 0.0,
child: YourWidget(),
)
- 特点:通过透明度控制视觉效果
- 渲染行为:隐藏时不透明但仍占用空间
- 交互:隐藏后仍可接收手势事件
3. AnimatedOpacity 组件
AnimatedOpacity(
opacity: condition ? 1.0 : 0.0,
duration: Duration(milliseconds: 300),
child: YourWidget(),
)
- 特点:带动画过渡效果
- 用途:适合需要渐显/渐隐动画的场景
4. Offstage 组件
Offstage(
offstage: !condition,
child: YourWidget(),
)
- 特点:完全从渲染树中移除
- 渲染行为:不占用布局空间,不消耗渲染资源
- 性能:最佳性能选择
5. ConditionalBuilder 模式
condition ? YourWidget() : SizedBox.shrink()
// 或
condition ? YourWidget() : Container()
- 特点:条件性地创建/销毁组件
- 性能:最优,完全不渲染隐藏组件
组件差异总结
| 组件 | 占用空间 | 性能 | 动画支持 | 用途 |
|---|---|---|---|---|
Visibility |
是 | 一般 | 否 | 简单显示/隐藏 |
Opacity |
是 | 较好 | 可选 | 视觉淡入淡出 |
AnimatedOpacity |
是 | 一般 | 是 | 带动画效果 |
Offstage |
否 | 最佳 | 否 | 高性能隐藏 |
ConditionalBuilder |
否 | 最佳 | 可选 | 完全条件渲染 |
推荐使用场景
-
频繁切换:使用
Offstage或Visibility -
需要动画:使用
AnimatedOpacity -
静态条件:使用
ConditionalBuilder -
保留布局:使用
Opacity或Visibility的maintainSize选项