carousel_option.dart 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import 'package:flutter/material.dart';
  2. enum CarouselPageChangedReason { timed, manual, controller }
  3. enum CenterPageEnlargeStrategy { scale, normal }
  4. class CarouselOption {
  5. //设置轮播组件的高度,如果aspectRatio设置就会使用aspectRatio计算的高度
  6. final double height;
  7. //如果没有设置height就会使用宽高比aspectRatio,默认是16:9
  8. final double aspectRatio;
  9. //每个页面应占据的轮播窗口比例, 默认是0.8
  10. final double viewportFraction;
  11. //初始index, 默认为0
  12. final int initIndex;
  13. //是否开启无限循环, 默认true(开启)
  14. final bool isEnableLoop;
  15. //是否开启数据反序,默认false(关闭)
  16. final bool isEnableReverse;
  17. //是否开启自动播放, 默认true(开启)
  18. final bool autoPlay;
  19. //自动播放时间间隔
  20. final Duration autoPlayInterval;
  21. //自动播放动画切换时间
  22. final Duration autoPlayAnimationDuration;
  23. //自动播放动画插值器
  24. final Curve autoPlayCurve;
  25. //是否开启当前页面尺寸大于侧面图,主要凸显切换大小过渡动画
  26. final bool isEnableLargeCenterPage;
  27. //滚动方向, 默认是horizontal水平滚动
  28. final Axis scrollDirection;
  29. //页面切换的回调
  30. final Function(int index, CarouselPageChangedReason reason) onPageChanged;
  31. //页面滚动回调值
  32. final ValueChanged<double> onScrolled;
  33. //轮播应如何响应用户输入。例如,确定用户停止拖动页面视图后项目如何继续进行动画处理。
  34. final ScrollPhysics scrollPhysics;
  35. //如果为true,则自动播放功能在用户与轮播互动时会暂停,在用户完成互动后会恢复。 默认为`true`
  36. final bool pauseAutoPlayOnTouch;
  37. //如果为true,则自动播放功能在用户与轮播互动时会暂停,在用户完成交互后会恢复。默认为true
  38. final bool pauseAutoPlayOnManualNavigate;
  39. //如果enableInfiniteScroll是false,而autoPlay是true,则此选项
  40. // 决定轮播是否应到达最后一个项目而转到第一个项目。
  41. // 如果设置为“ true”,则自动播放到达最后一项时将暂停。
  42. // 如果设置为“ false”,则自动播放功能将在第一项
  43. // 位于最后一项时为其动画。
  44. final bool pauseAutoPlayInFiniteScroll;
  45. //如果要在重新创建页面视图时保持其位置,请传递一个“ PageStoragekey”。
  46. final PageStorageKey pageViewKey;
  47. //确定哪种方法可以放大中心页面
  48. final CenterPageEnlargeStrategy enlargeStrategy;
  49. //是否禁用每张幻灯片的“居中”小部件
  50. final bool disableCenter;
  51. CarouselOption(
  52. {this.height,
  53. this.aspectRatio = 16 / 9,
  54. this.viewportFraction = 0.8,
  55. this.initIndex = 0,
  56. this.isEnableLoop = true,
  57. this.isEnableReverse = false,
  58. this.autoPlay = true,
  59. this.autoPlayInterval = const Duration(seconds: 4),
  60. this.autoPlayAnimationDuration = const Duration(milliseconds: 800),
  61. this.autoPlayCurve = Curves.fastOutSlowIn,
  62. this.isEnableLargeCenterPage = false,
  63. this.onPageChanged,
  64. this.onScrolled,
  65. this.scrollPhysics,
  66. this.scrollDirection = Axis.horizontal,
  67. this.pauseAutoPlayOnTouch = true,
  68. this.pauseAutoPlayOnManualNavigate = true,
  69. this.pauseAutoPlayInFiniteScroll = false,
  70. this.pageViewKey,
  71. this.enlargeStrategy = CenterPageEnlargeStrategy.scale,
  72. this.disableCenter = false});
  73. }