gpt4 book ai didi

dart - Flutter - 如何制作 PageView 和 ListView?

转载 作者:IT王子 更新时间:2023-10-29 06:54:12 27 4
gpt4 key购买 nike

我正在尝试使用此 Horizontally scrollable cards with Snap effect in flutter 中的 PageView、PageController 和 ListView 制作轮播.但是它抛出了这个异常......

══╡ 渲染库捕获异常╞══════════════════════════════════════════════ ══════════════════════I/flutter (17678): 在 performResize() 期间抛出以下断言:I/flutter (17678):水平视口(viewport)被赋予无限高度。I/flutter (17678):视口(viewport)在横轴上扩展以填充它们的容器并约束它们的 child 以匹配I/flutter (17678):它们在横轴上的范围。在这种情况下,水平视口(viewport)被赋予了无限量的i/flutter(17678): 展开的垂直空间。

有人可以帮我解决吗?

我想将这个 Carousel 添加到 Stack-filled 中,其中包含背景图像、变换类和淡入淡出过渡。

  @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)),
),
),
);

这是完整代码 https://pastebin.com/xXRkaWuR

最佳答案

您可能已经从错误中猜到了,基本上这意味着由于您没有指定有限高度,ListView 将获得无限高度。尝试在 ListView.builderListView 中使用 shr​​inkWrap: true

或者您也可以尝试将 ListView 包装在有限高度的 ContainerSizedBox 中。

例子-

Container(
height: 200.0,
child: ListView(
/*Remaining Code*/
),
)

你可以尝试用 ListView.builder 做同样的事情

关于dart - Flutter - 如何制作 PageView 和 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53969121/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com