我正在尝试使用 PageView、PageController 和 ListView 制作一个旋转木马,来自这张水平可滚动的卡片,在 flutter 中具有 Snap 效果。但它抛出了这个异常......
???通过渲染库捕获的异常 ????????????????????????????????????????????? ???????????? I/flutter (17678):在 performResize() 期间抛出以下断言: I/flutter (17678):水平视口被赋予无限高度。I/flutter (17678):视口在横轴上扩展以填充其容器并约束其子项以匹配 I/flutter (17678):它们在横轴上的范围。在这种情况下,水平视口被赋予无限量的 I/flutter (17678):可扩展的垂直空间。
有人可以帮我修复它吗?
我想在 Stack-filled 内添加这个 Carousel,里面有背景图像、变换类和淡入淡出过渡。
@override
void initState() {
super.initState();
controller = PageController(
initialPage: 0,
keepPage: true,
);
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
builder: (BuildContext context, Widget child) {
return Scaffold(
//BODY
body: ListView(children: <Widget>[
new Stack(
children: <Widget>[
new AspectRatio(...),
new Transform(...),
//THIS IS
new ListView.builder(
itemCount: 3,
scrollDirection: Axis.horizontal,
padding: EdgeInsets.symmetric(vertical: 16.0),
itemBuilder: (BuildContext context, int index) {
if (index % 3 == 0) {
return _buildCarousel(context, index ~/ 3);
} else {
return Divider();
}
},
),
}
}
}
Widget _buildCarousel(BuildContext context, int carouselIndex) {
return Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text('Carousel $carouselIndex'),
SizedBox(
// you may want to use an aspect ratio here for tablet support
height: 200.0,
child: PageView.builder(
// store this controller in a State to save the carousel scroll position
controller: PageController(viewportFraction: 0.8),
itemBuilder: (BuildContext context, int itemIndex) {
return _buildCarouselItem(context, carouselIndex, itemIndex);
},
),
)
],
);
Widget _buildCarouselItem(
BuildContext context, int carouselIndex, int itemIndex) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 4.0),
child: Container(
decoration: BoxDecoration(
color: Colors.grey,
borderRadius: BorderRadius.all(Radius.circular(4.0)),
),
),
);
Run Code Online (Sandbox Code Playgroud)
正如您可能从错误中猜到的那样,基本上这意味着由于您没有指定有限的高度,ListView因此获得了无限的高度。尝试shrinkWrap: true在您的ListView.builder和ListView.
或者,您也可以尝试将ListViews包裹在 aContainer或SizedBox有限高度中。
例子-
Container(
height: 200.0,
child: ListView(
/*Remaining Code*/
),
)
Run Code Online (Sandbox Code Playgroud)
你可以尝试做同样的事情 ListView.builder
| 归档时间: |
|
| 查看次数: |
6788 次 |
| 最近记录: |