Flutter中用Flexible包裹Column后内部Widget不显示该如何解决?
问题原因
- 被Flexible包裹的内部Column的所有子Container都没有设置高度约束,Container在无明确高度约束的父布局中默认会将自身尺寸调整为0,因此内容完全不可见
- 内部Column的后三个子Container没有设置背景色,就算分配了高度也无法显示对应的色块
- 你需要给内部Column的子项分配高度占比,才能在自适应父高度的同时展示出对应效果
修正方案
给内部Column的四个子容器外层增加Flexible/Expanded,按需分配flex值即可,以下是可直接运行的修正代码:
class _HomeScreenState extends State<HomeScreen> { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black, appBar: AppBar( backgroundColor: Colors.black, ), body: SafeArea( child: Column( children: [ Flexible( flex: 9, child: Column( children: [ // 给每个子容器套Flexible分配高度占比,可自行调整flex值修改不同色块的高度比例 Flexible( flex: 1, child: Padding( padding: const EdgeInsets.only(bottom: 8.0), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), color: Colors.grey, ), ), ), ), Flexible( flex: 1, child: Padding( padding: const EdgeInsets.only(bottom: 8.0), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), color: Colors.grey, ), ), ), ), Flexible( flex: 1, child: Padding( padding: const EdgeInsets.only(bottom: 8.0), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), color: Colors.grey, ), ), ), ), Flexible( flex: 1, child: Padding( padding: const EdgeInsets.only(bottom: 8.0), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), color: Colors.grey, ), ), ), ), ], ), ), Flexible( flex: 1, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), color: Colors.white), ), ) ], ), ), ); } }
内容的提问来源于stack exchange,提问作者Wes
相关产品推荐
相关产品推荐

