实际上你想要的是 PageView。
PageView 接受一个 PageController
作为参数。该控制器拥有一个 viewportFraction
属性(默认为1.0),它以百分比表示所显示页面的主尺寸。
这意味着,使用 viewportFraction 为 0.5,主页将居中显示。并且您将在左右两侧各看到半个页面(如果有的话)
例如:
class Carroussel extends StatefulWidget {
@override
_CarrousselState createState() => new _CarrousselState();
}
class _CarrousselState extends State<Carroussel> {
PageController controller;
int currentpage = 0;
@override
initState() {
super.initState();
controller = PageController(
initialPage: currentpage,
keepPage: false,
viewportFraction: 0.5,
);
}
@override
dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
child: PageView.builder(
onPageChanged: (value) {
setState(() {
currentpage = value;
});
},
controller: controller,
itemBuilder: (context, index) => builder(index)),
),
),
);
}
builder(int index) {
return AnimatedBuilder(
animation: controller,
builder: (context, child) {
double value = 1.0;
if (controller.position.haveDimensions) {
value = controller.page - index;
value = (1 - (value.abs() * .5)).clamp(0.0, 1.0);
}
return Center(
child: SizedBox(
height: Curves.easeOut.transform(value) * 300,
width: Curves.easeOut.transform(value) * 250,
child: child,
),
);
},
child: Container(
margin: const EdgeInsets.all(8.0),
color: index % 2 == 0 ? Colors.blue : Colors.red,
),
);
}
}