原因
TabBarView
组件占用父组件尽可能大的空间,这种布局一般外层都是可滚动的,类似SingleChildScrollView
,而在Column
中没有一个明确的高度约束,也就是说无限高,故报错。
解决方法
1. 定高
直接了当地解决问题,但是有一个很大的缺点,TabBarView
加载的组件可能是不同高度的,故预定的高度要取他们的最大高度,布局不好看。
SingleChildScrollView(
child: Column(
children: [
MyTabBar(),
SizedBox(
height: 500,
child: TabBarView(
children:[
MyTabView1(),
MyTabView2(),
],
),
),
],
),
)
2. 不使用TabBarView
组件
使用IndexedStack
组件代替,这种方式是比较推荐的。缺点是缺少原本TabBarView
组件的滑动动画,但是可以搭配AnimatedSwitcher
组件自定义实现。点击了解更多
SingleChildScrollView(
child: Column(
children: [
MyTabBar(),
IndexedStack(
index: currentIndex, //currentIndex是我举例的值,实际中可能来自TabController,或者Provider等
children:[
MyTabView1(),
MyTabView2(),
],
),
),
],
),
)
3. 未完待续
总结
flutter布局原理不清楚。
在flutter开发中会遇到很多奇奇怪怪的问题,连百度也不好找。推荐大家使用Google搜索,很多问题都会找到满意的解决方法。