【发布时间】:2019-07-05 15:57:09
【问题描述】:
这就是我的布局结构
这是主屏幕
ListView(
children: <Widget>[
_buildCarousel(),
_buildHomeTabBar(),
],
)
这是 HomeTabBar 屏幕
SingleChildScrollView(
child:
DefaultTabController(
length: myTabs.length,
initialIndex: 0,
child: Column(
children: [
TabBar(
isScrollable: true,
tabs: myTabs,
),
Container(
height: 600,
child:
TabBarView(
children: [
ChildScreen(),
ChildScreen2(),
ChildScreen3(),
],
)
)
],
))
);
我想摆脱Container 的高度。我们如何做到这一点?
ChildScreen 正在从 REST 获取数据,它实际上是一个 GridView.Builder,所以Container 的高度应该是动态的。
抱歉,我错过了 ChildScreen 的布局,实际上是这样的
SingleChildScrollView(
// shrinkWrap: true,
child: Column(
children: <Widget>[
StreamBuilder(
stream: categoryBloc.categoryList,
builder: (context, AsyncSnapshot<List<Category>> snapshot){
if (snapshot.hasData && snapshot!=null) {
if(snapshot.data.length > 0){
return buildCategoryList(snapshot);
}
else if(snapshot.data.length==0){
return Text('No Data');
}
}
else if (snapshot.hasError) {
return ErrorScreen(errMessage: snapshot.error.toString());
}
return Center(child: CircularProgressIndicator());
},
),
]
)
);
所以StreamBuilder 内部是GridView.Builder。
我要删除的主要内容Container 高度。在不同的设备上看起来很难看...
因此,如果我删除高度,它将不会显示在屏幕上并引发错误
I/flutter (493): #2 RenderObject.layout (package:flutter/src/rendering/object.dart:1578:12) I/flutter(493):#3 RenderSliverList.performLayout.advance(包:flutter/src/rendering/sliver_list.dart:200:17) I/flutter (493): #4 RenderSliverList.performLayout (package:flutter/src/rendering/sliver_list.dart:233:19) I/flutter (493): #5 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (493): #6 RenderSliverPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:182:11) I/flutter (493): #7 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (493): #8 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:405:13) I/flutter (493): #9 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1316:12) I/flutter (493): #10 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1234:20) I/flutter (493): #11 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7) I/flutter (493): #12 _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:104:13) I/flutter (493): #13 RenderObject.layout (package:flutter/src/rendering/object.dart:1634:7)
【问题讨论】:
-
你得到什么错误 - 当你删除容器高度时。 -
height: 600,? -
它不会出现在屏幕上。我将更新错误消息。
-
在 GridView.Builder 中是
shrinkWrap: true,吗? -
@anmol.majhail 是
shrinkWrap: true在 GridView.Builder 上 -
这就是我解决类似问题的方法stackoverflow.com/a/66540036/4150479