Flutter 组件之 Swiper(轮播图)

flutter实现轮播图效果

1.在项目目录下的pubspec.yaml添加flutter_swiper依赖,然后点击Pub get

flutter_swiper: ^1.1.4

2.使用如下:

import 'package:flutter/material.dart';
import 'package:flutter_swiper/flutter_swiper.dart';

class SwiperDefaultPage extends StatefulWidget {
  @override
  _SwiperDefaultPageState createState() => _SwiperDefaultPageState();
}

class _SwiperDefaultPageState extends State<SwiperDefaultPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SwiperTest'),
      ),
      body: Column(
        children: <Widget>[
          Padding(padding: EdgeInsets.all(10.0)),
          buildStyle1()
        ],
      ),
    );
  }

  //banner 图
  Widget buildStyle1() {
    return Container(
      height: 200.0,
      child: Swiper(
        // 横向
        scrollDirection: Axis.horizontal,
        // 布局构建
        itemBuilder: (BuildContext context, int index) {
          return Image.asset("resource/images/my_image.jpg", fit: BoxFit.fill);
        },
        //条目个数
        itemCount: 6,
        // 自动翻页
        autoplay: true,
        // 分页指示
        pagination: _buildPlugin(),
        // pagination: _buildSwiperPagination(),
        // pagination: _buildNumSwiperPagination(),
        //点击事件
        onTap: (index) {
          print(" 点击 " + index.toString());
        },
        // 相邻子条目视窗比例
        viewportFraction: 1,
        // 用户进行操作时停止自动翻页
        autoplayDisableOnInteraction: true,
        // 无限轮播
        loop: true,
        //当前条目的缩放比例
        scale: 1,
      ),
    );
  }

  //默认圆点指示器
  _buildPlugin() {
    return SwiperPagination();
  }

  //自定圆点分页指示器
  _buildSwiperPagination() {
    // 分页指示器
    return SwiperPagination(
      //指示器显示的位置 Alignment.bottomCenter 底部中间
      alignment: Alignment.bottomCenter,
      // 距离调整
      margin: const EdgeInsets.only(bottom: 5),
      // 指示器构建
      builder: DotSwiperPaginationBuilder(
          // 点之间的间隔
          space: 2,
          // 没选中时的大小
          size: 6,
          // 选中时的大小
          activeSize: 12,
          // 没选中时的颜色
          color: Colors.black54,
          //选中时的颜色
          activeColor: Colors.white),
    );
  }

  //自定义分页指示器
  _buildNumSwiperPagination() {
    return SwiperPagination(
      //指示器显示的位置
      alignment: Alignment.bottomCenter, // 位置 Alignment.bottomCenter 底部中间
      // 距离调整
      margin: const EdgeInsets.only(bottom: 5),
      // 指示器构建
      builder: FractionPaginationBuilder(
          // 选中时字体大小
          activeFontSize: 14,
          // 字体大小
          fontSize: 14,
          // 字体颜色
          color: Colors.red,
          //选中时的颜色
          activeColor: Colors.blue),
    );
  }
}

效果图:

3.基本参数说明:

参数默认值描述
scrollDirectionAxis.horizontal滚动方向,设置为Axis.vertical如果需要垂直滚动
looptrue无限轮播模式开关
index0初始的时候下标位置
autoplayfalse自动播放开关
autoplayDely3000自动播放延迟毫秒数
autoplayDiableOnInteractiontrue当用户拖拽的时候,是否停止自动播放
onIndexChangedvoid onIndexChanged(int index)当用户手动拖拽或者自动播放引起下标改变的时候调用
onTapvoid onTap(int index)当用户点击某个轮播的时候调用
duration300.0动画时间,单位是毫秒
paginationnull设置 new SwiperPagination() 展示默认分页指示器
controlnull设置 new SwiperControl() 展示默认分页按钮
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个基本的Flutter轮播图示例: ```dart import 'package:flutter/material.dart'; import 'package:carousel_slider/carousel_slider.dart'; class MyCarousel extends StatefulWidget { @override _MyCarouselState createState() => _MyCarouselState(); } class _MyCarouselState extends State<MyCarousel> { int _current = 0; List<String> _images = [ 'https://picsum.photos/id/1015/600/400', 'https://picsum.photos/id/1016/600/400', 'https://picsum.photos/id/1018/600/400', 'https://picsum.photos/id/1019/600/400' ]; @override Widget build(BuildContext context) { return Column( children: [ CarouselSlider( items: _images.map((image) { return Container( margin: EdgeInsets.all(5), child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(5)), child: Image.network(image, fit: BoxFit.cover, width: 1000), ), ); }).toList(), options: CarouselOptions( autoPlay: true, enlargeCenterPage: true, aspectRatio: 2.0, onPageChanged: (index, reason) { setState(() { _current = index; }); }), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: _images.map((image) { int index = _images.indexOf(image); return Container( width: 8, height: 8, margin: EdgeInsets.symmetric(vertical: 10, horizontal: 2), decoration: BoxDecoration( shape: BoxShape.circle, color: _current == index ? Colors.blueAccent : Colors.grey[400], ), ); }).toList(), ), ], ); } } ``` 这个示例使用了一个第三方库`carousel_slider`来实现轮播图。首先在`pubspec.yaml`文件中添加依赖: ```yaml dependencies: flutter: sdk: flutter carousel_slider: ^4.0.0 ``` 然后在代码中导入: ```dart import 'package:carousel_slider/carousel_slider.dart'; ``` 在`_MyCarouselState`类中定义了一个`_current`变量来跟踪当前轮播图的索引。然后定义了一个包含图像URL的列表`_images`。在`build`方法中,使用`CarouselSlider`小部件来创建轮播图。`items`属性接受一个包含所有要显示的小部件的列表。在这个示例中,我们将图像映射到一个包含图像的容器中,并将它们放在一个`ClipRRect`小部件中,以便将它们的边角切成圆角。 `options`属性接受一个`CarouselOptions`对象,其中包括自动播放、放大中心页面、宽高比和页面更改回调等选项。 在`onPageChanged`回调中,我们使用`setState`方法来更新`_current`变量。最后,我们创建了一个包含小圆点指示器的行,以便用户可以看到当前显示的页面。这个小圆点指示器使用`_images`列表中的图像来创建,并基于当前索引来高亮显示当前页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值