颤振,如何正常构造gridview结构?
我正在实现通过GridView和学习BloC模式来显示图像,但我的实现仍然存在一个关于渲染问题的错误 很长一段时间以来,我试图找到解决办法,但我没有领会。下面是我的代码,这个代码结构有什么问题颤振,如何正常构造gridview结构?,gridview,flutter,rendering,Gridview,Flutter,Rendering,我正在实现通过GridView和学习BloC模式来显示图像,但我的实现仍然存在一个关于渲染问题的错误 很长一段时间以来,我试图找到解决办法,但我没有领会。下面是我的代码,这个代码结构有什么问题 @override Widget build(BuildContext context) { return StreamBuilder( stream: bloc.state, builder: (BuildContext context, AsyncS
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: bloc.state,
builder: (BuildContext context, AsyncSnapshot<WebtoonState> snapshot){
final state = snapshot.data;
return Scaffold(
body: Column(
children: <Widget>[
SizedBox(height: 40.0),
RaisedButton(
child: Text(
'웹툰!!',
style: TextStyle(
color: Colors.black
),
),
color: Colors.orange,
onPressed: () => bloc.onDayChanged.add('mon'),
),
SizedBox(height: 40.0),
Stack(
children: <Widget>[
WebtoonLoadingWidget(visible: state is WebtoonLoading),
WebtoonResultWidget(
items: state is WebtoonDone ? state.result.items : [],
)
],
)
],
),
);
},
);
}
@覆盖
小部件构建(构建上下文){
返回流生成器(
流:bloc.state,
生成器:(BuildContext上下文,异步快照){
最终状态=snapshot.data;
返回脚手架(
正文:专栏(
儿童:[
尺寸箱(高度:40.0),
升起的按钮(
子:文本(
'웹툰!!',
样式:TextStyle(
颜色:颜色。黑色
),
),
颜色:颜色。橙色,
onPressed:()=>bloc.onDayChanged.add('mon'),
),
尺寸箱(高度:40.0),
堆叠(
儿童:[
WebtoonLoadingWidget(可见:状态为WebtoonLoading),
WebtoonResultWidget(
items:状态为WebtoonDone?state.result.items:[],
)
],
)
],
),
);
},
);
}
WebtoonResultWidget
Widget build(BuildContext context) {
return AnimatedOpacity(
duration: Duration(milliseconds: 300),
opacity: visible ? 1.0 : 0.0,
child: GridView.count(
shrinkWrap: true,
crossAxisCount: 3,
childAspectRatio: 0.6,
children: List.generate(items.length, (index){
return Column(
children: <Widget>[
Image.network(
items[index].imgUrl,
scale: 0.5
),
Padding(
padding: const EdgeInsets.all(5.0),
child: Column(
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: Text(
items[index].title,
style: TextStyle(fontWeight: FontWeight.bold),
),
),
Text(
"★ " + items[index].rate,
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.bold
),
),
Expanded(child: Container()),
Align(
alignment: Alignment.centerLeft,
child: Text(
items[index].artist,
style: TextStyle(fontWeight: FontWeight.bold),
),
)
],
),
)
],
);
}),
),
);
}
小部件构建(构建上下文){
返回能力(
持续时间:持续时间(毫秒:300),
不透明度:可见?1.0:0.0,
子项:GridView.count(
收缩膜:对,
交叉轴计数:3,
childAspectRatio:0.6,
子项:List.generate(items.length,(索引){
返回列(
儿童:[
图像网络(
items[索引].imgUrl,
比例:0.5
),
填充物(
填充:常数边集全部(5.0),
子:列(
儿童:[
对齐(
对齐:alignment.centerLeft,
子:文本(
项目[索引]。标题,
样式:TextStyle(fontWeight:fontWeight.bold),
),
),
正文(
"★ " + 项目[索引]。费率,
样式:TextStyle(
颜色:颜色,红色,
fontWeight:fontWeight.bold
),
),
已展开(子:容器()),
对齐(
对齐:alignment.centerLeft,
子:文本(
项目[索引]。艺术家,
样式:TextStyle(fontWeight:fontWeight.bold),
),
)
],
),
)
],
);
}),
),
);
}
我的错误日志
I/颤振(28386):══╡ 呈现库捕获到异常
╞═════════════════════════════════════════════════════════ I/颤振
(28386):在performLayout()期间引发了以下断言:
I/flatter(28386):“包:flatter/src/rendering/object.dart”:失败
断言:第1578行位置12:I/颤振(28386):
“!\u debugDoingThisLayout”:不正确。I/flatter(28386):I/flatter
(28386):断言指示框架中的错误
本身,或者我们应该提供基本的I/flatter(28386):更多
此错误消息中的信息可帮助您确定和修复
潜在原因。I/FLASTER(28386):在任何一种情况下,请报告
通过在GitHub:I/flatter(28386)上提交一个bug来验证此断言:I/flatter(28386):I/flatter(28386):当抛出异常时, 这是堆栈:I/flatter(28386):#2 RenderObject.layout (软件包:flatter/src/rendering/object.dart:1578:12)I/flatter(28386): 3 RenderFlex.performLayout(包:flatter/src/rendering/flex.dart:738:15)I/flatter(28386):#4 RenderObject.layout(包:flatter/src/rendering/object.dart:1634:7)
使用容器小部件包装列并为其指定固定大小。 我通过添加固定高度来解决同样的问题
Container(
color: Colors.white,
height: 110,
padding: EdgeInsets.only(left: getSizeOf(20)),
alignment: Alignment.topCenter,
child: new Row(
children: <Widget>[
new Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
exercise.title,
style: TextStyle(
fontSize: getSizeOf(20),
fontFamily: Constant.fontRegular,
),
),
SizedBox(height: 5.0),
exercise.categoriesData.length > 3
// ? showFirstThreeCategoryTags(exercise.categoriesData, getTagView, 26)
? showFirstThree(exercise.categoriesData)
: Wrap(
direction: Axis.horizontal,
crossAxisAlignment: WrapCrossAlignment.start,
alignment: WrapAlignment.start,
spacing: 1,
children:
exercise.categoriesData.map((Category tagCate) {
return getTagView(tagCate);
}).toList()),
])),
loadFirebaseImage(exercise.images[0], 100, context, exercise.images)
],
));
容器(
颜色:颜色,白色,
身高:110,
填充:仅限边集(左:getSizeOf(20)),
对齐:alignment.topCenter,
孩子:新的一排(
儿童:[
新扩展(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
练习.title,
样式:TextStyle(
fontSize:getSizeOf(20),
fontFamily:Constant.fontRegular,
),
),
尺寸箱(高度:5.0),
练习.categoriesData.length>3
//?显示前三个类别标签(exercise.categoriesData,getTagView,26)
?显示前三个(练习。分类数据)
:包裹(
方向:水平轴,
crossAxisAlignment:WrapCrossAlignment.start,
对齐:wrappalignment.start,
间距:1,
儿童:
exercise.categoriesData.map((Category标记){
返回getTagView(ta