Flutter轮播图插件flutter_swiper_null_safety的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter轮播图插件flutter_swiper_null_safety的使用

描述

这个库完全基于jzoom/flutter_swiper进行开发,遵循原作者的使用方式。为了适配Flutter 2.0及以上版本,此库已进行了空安全(null safety)的修改。如果您需要支持Flutter 2.0以下版本,请参考原作者的GitHub仓库。

示例代码

主应用入口

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Swiper Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Swiper'),
      routes: {
        '/example01': (BuildContext context) => ExampleHorizontal(),
        '/example02': (BuildContext context) => ExampleVertical(),
        // 更多路由...
      },
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);
  final String? title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Widget> render(BuildContext context, List children) {
    return ListTile.divideTiles(
        context: context,
        tiles: children.map((dynamic data) {
          return buildListTile(context, data[0], data[1], data[2]);
        })).toList();
  }

  Widget buildListTile(
      BuildContext context, String title, String subtitle, String url) {
    return ListTile(
      onTap: () {
        Navigator.of(context).pushNamed(url);
      },
      isThreeLine: true,
      dense: false,
      leading: null,
      title: Text(title),
      subtitle: Text(subtitle),
      trailing: Icon(Icons.arrow_right, color: Colors.blueAccent),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title ?? ''),
      ),
      body: ListView(
        children: render(context, [
          ["Horizontal", "Scroll Horizontal", "/example01"],
          ["Vertical", "Scroll Vertical", "/example02"],
          // 更多列表项...
        ]),
      ),
    );
  }
}

水平轮播图示例

const List<String> images = ['images/1.png', 'images/2.png', 'images/3.png'];

class ExampleHorizontal extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Horizontal Swiper"),
      ),
      body: Swiper(
        itemBuilder: (BuildContext context, int index) {
          return Image.asset(
            images[index],
            fit: BoxFit.fill,
          );
        },
        autoplay: true,
        itemCount: images.length,
        pagination: SwiperPagination(),
        control: SwiperControl(),
      ),
    );
  }
}

垂直轮播图示例

class ExampleVertical extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Vertical Swiper"),
      ),
      body: Swiper(
        itemBuilder: (BuildContext context, int index) {
          return Image.asset(
            images[index],
            fit: BoxFit.fill,
          );
        },
        autoplay: true,
        itemCount: images.length,
        scrollDirection: Axis.vertical,
        pagination: SwiperPagination(alignment: Alignment.centerRight),
        control: SwiperControl(),
      ),
    );
  }
}

自定义分页器示例

class ExampleCustomPagination extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Custom Pagination"),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: Swiper(
              itemBuilder: (BuildContext context, int index) {
                return Image.asset(
                  images[index],
                  fit: BoxFit.fill,
                );
              },
              autoplay: true,
              itemCount: images.length,
              pagination: SwiperPagination(
                margin: EdgeInsets.all(0.0),
                builder: SwiperCustomPagination(builder:
                    (BuildContext context, SwiperPluginConfig config) {
                  return ConstrainedBox(
                    child: Container(
                      color: Colors.white,
                      child: Text(
                        "${titles[config.activeIndex]} ${config.activeIndex + 1}/${config.itemCount}",
                        style: TextStyle(fontSize: 20.0),
                      ),
                    ),
                    constraints: BoxConstraints.expand(height: 50.0),
                  );
                }),
              control: SwiperControl(),
            ),
          ),
          // 更多自定义分页器配置...
        ],
      ),
    );
  }
}

以上是flutter_swiper_null_safety插件的基本使用方法和一些示例代码。您可以根据需要调整参数以满足您的项目需求。希望这些信息对您有所帮助!


更多关于Flutter轮播图插件flutter_swiper_null_safety的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter轮播图插件flutter_swiper_null_safety的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_swiper_null_safety插件来实现轮播图的示例代码。flutter_swiper_null_safety是一个支持空安全的轮播图插件,基于flutter_swiper

首先,确保你的Flutter项目已经添加了flutter_swiper_null_safety依赖。在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_swiper_null_safety: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中创建一个包含轮播图的页面。以下是一个完整的示例:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Swiper Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final List<String> imageUrls = [
    'https://example.com/image1.jpg',
    'https://example.com/image2.jpg',
    'https://example.com/image3.jpg',
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Swiper Example'),
      ),
      body: Center(
        child: Container(
          height: 300,
          child: Swiper(
            itemBuilder: (BuildContext context, int index) {
              return Image.network(
                imageUrls[index],
                fit: BoxFit.cover,
              );
            },
            itemCount: imageUrls.length,
            autoplay: true,
            duration: 2000,
            pagination: new SwiperPagination(),
            loop: false,
          ),
        ),
      ),
    );
  }
}

代码解释:

  1. 依赖引入

    • pubspec.yaml中引入flutter_swiper_null_safety依赖。
  2. 主应用入口

    • MyApp类作为Flutter应用的入口,它包含一个MaterialApp
  3. 轮播图页面

    • MyHomePage类包含一个轮播图。
    • imageUrls列表存储了图片的URL。
    • Scaffold组件包含应用栏和主体内容。
    • Container组件设置了轮播图的高度。
    • Swiper组件用于创建轮播图:
      • itemBuilder方法定义了每个轮播项的构建逻辑,这里使用Image.network从网络加载图片。
      • itemCount定义了轮播项的数量。
      • autoplay设置为true以启用自动播放。
      • duration定义了自动播放的间隔时间(毫秒)。
      • pagination添加了分页指示器。
      • loop设置为false,表示不循环播放(设置为true则循环播放)。

这样,你就可以在Flutter项目中实现一个基本的轮播图功能。如果你需要更多的自定义功能,可以参考flutter_swiper_null_safety的官方文档。

回到顶部