Dart 在颤振中创建图像旋转木马

Dart 在颤振中创建图像旋转木马,dart,flutter,Dart,Flutter,我如何创建一个像下面的例子一样的容器旋转木马 我查看了Pageview类,但它只显示一个容器,而隐藏了其他容器。但我想看看集装箱的左右两侧。在Flitter中是否有这样做的方法 注意:当前容器应始终位于中心 编辑:Darky给出了一个很好的例子,但我对他给出的代码有一个问题: 在生成时引发了以下错误 AnimatedBuilder(动画:PageController#fc5f0(一个客户端,偏移量 0.0),脏,状态:_AnimatedState#1ea5c):无效参数(lowerLimit)

我如何创建一个像下面的例子一样的容器旋转木马

我查看了Pageview类,但它只显示一个容器,而隐藏了其他容器。但我想看看集装箱的左右两侧。在Flitter中是否有这样做的方法

注意:当前容器应始终位于中心

编辑:Darky给出了一个很好的例子,但我对他给出的代码有一个问题:


在生成时引发了以下错误 AnimatedBuilder(动画:PageController#fc5f0(一个客户端,偏移量 0.0),脏,状态:_AnimatedState#1ea5c):无效参数(lowerLimit):不是数字:null-

这会被抛出到他调用controller.page的位置。有人知道我如何解决这个问题吗?

实际上你想要的是
PageView

PageView
接受
PageController
作为参数。并且该控制器拥有一个
viewportFraction
属性(默认值为1.0),该属性以百分比表示显示页面的主要大小

这意味着viewportFraction为0.5时,主页将居中。你会看到左右各有半页(如果有的话)

例如:

class Carroussel扩展了StatefulWidget{
@凌驾
_CarrousselState createState()=>new_CarrousselState();
}
类_CarrousselState扩展状态{
页面控制器;
int currentpage=0;
@凌驾
initState(){
super.initState();
控制器=页面控制器(
initialPage:currentpage,
基帕奇:错,
视口分数:0.5,
);
}
@凌驾
处置{
controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:容器(
子项:PageView.builder(
onPageChanged:(值){
设置状态(){
currentpage=值;
});
},
控制器:控制器,
itemBuilder:(上下文,索引)=>builder(索引)),
),
),
);
}
生成器(整数索引){
返回动画生成器(
动画:控制器,
生成器:(上下文,子对象){
双值=1.0;
if(控制器位置尺寸){
值=controller.page-索引;
value=(1-(value.abs()*.5)).clamp(0.0,1.0);
}
返回中心(
孩子:大小盒子(
高度:曲线。缓和。变换(值)*300,
宽度:曲线。缓和。变换(值)*250,
孩子:孩子,
),
);
},
子:容器(
边距:所有常数边集(8.0),
颜色:索引%2==0?颜色。蓝色:颜色。红色,
),
);
}
}

这解决了我的问题:

Future.delayed(const Duration(milliseconds: 20), () {

  setState(() {
    _pageController.animateToPage(0, duration: Duration(milliseconds: 1), curve: Curves.bounceIn);
  });

});

生成AnimatedBuilder(动画:PageController#fc5f0(一个客户端,偏移量0.0),脏,状态:_AnimatedState#1ea5c)时引发以下参数错误:无效参数(lowerLimit):非数字:Null如果我执行controller.page,我会出现这些错误。我不明白为什么我会通过捕获ArgumentError并将值设置为1.0来避免错误。在调用pageController.page之前,应该检查pageController.position.haveDimensions是否为true,否则它可能会抛出NPE。我不明白动画是如何工作的。我看到页面视图滚动时调用了builder函数。但这怎么可能呢?感谢AnimatedBuilder小部件?还是控制器?://值=值1.0?1.0:价值;也帮我解决了。我认为上面使用AnimationController的解决方案是好的,但不确定如何将其集成到示例中,因为它使用的是PageController
Future.delayed(const Duration(milliseconds: 20), () {

  setState(() {
    _pageController.animateToPage(0, duration: Duration(milliseconds: 1), curve: Curves.bounceIn);
  });

});