在颤动中具有捕捉效果的水平滚动卡

我想创建一张卡的列表,从左或向右滑动时可以快速对齐以适应效果。

每张卡之间都有一定的间距,适合于屏幕

除此之外,这些水平可滚动列表元素应包含在垂直可滚动列表内。

我能做的就是在flutter docs中的以下示例之后仅显示水平滚动卡的列表。

class SnapCarousel extends StatelessWidget {

@override

Widget build(BuildContext context) {

final title = 'Horizontal List';

return MaterialApp(

title: title,

home: Scaffold(

appBar: AppBar(

title: Text(title),

),

body: Container(

margin: EdgeInsets.symmetric(vertical: 20.0),

height: 200.0,

child: ListView(

scrollDirection: Axis.horizontal,

children: <Widget>[

Container(

width: 160.0,

color: Colors.red,

),

Container(

width: 160.0,

color: Colors.blue,

),

Container(

width: 160.0,

color: Colors.green,

),

Container(

width: 160.0,

color: Colors.yellow,

),

Container(

width: 160.0,

color: Colors.orange,

),

],

),

),

),

);

}

}

回答:

使用PageViewListView

import 'package:flutter/material.dart';

main() => runApp(MaterialApp(home: MyHomePage()));

class MyHomePage extends StatelessWidget {

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text('Carousel in vertical scrollable'),

),

body: ListView.builder(

padding: EdgeInsets.symmetric(vertical: 16.0),

itemBuilder: (BuildContext context, int index) {

if(index % 2 == 0) {

return _buildCarousel(context, index ~/ 2);

}

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

),

),

);

}

}

以上是 在颤动中具有捕捉效果的水平滚动卡 的全部内容, 来源链接: utcz.com/qa/424644.html

回到顶部