Flutter轮播图片展示插件sliding_images的使用

Flutter轮播图片展示插件sliding_images的使用

SlidingImages 是一个 Flutter 小部件,用于创建具有自定义属性的图片轮播,例如图片尺寸、填充、自动播放、自定义指示器等。

demo

特性

  • 支持通过 URL 加载图片。
  • 可自定义图片尺寸和填充。
  • 可设置初始显示的图片索引。
  • 支持自动播放,可设置间隔时间。
  • 可为图片添加边框。
  • 提供导航指示器。
  • 支持动画曲线自定义。
  • 活跃和非活跃图片的缩放效果可配置。

开始使用

要使用此插件,请在 pubspec.yaml 文件中添加 sliding_images 作为依赖项。

dependencies:
  sliding_images: ^版本号

然后运行以下命令以获取依赖项:

flutter pub get

使用方法

最小化示例

以下是最小化的 SlidingImages 使用示例:

SlidingImages(
  imgUrls: [
    "https://p1.pxfuel.com/preview/321/155/730/alpine-bavaria-flowers-germany.jpg",
    "https://p1.pxfuel.com/preview/818/670/574/dogs-chihuahua-rest-small-fur-cozy.jpg",
    "https://p0.pxfuel.com/preview/961/674/322/podcast-coffee-chocolate-cup.jpg",
  ],
)

自定义设置

以下是一个包含更多自定义选项的示例:

SlidingImages(
  imgUrls: [
    "https://p1.pxfuel.com/preview/321/155/730/alpine-bavaria-flowers-germany.jpg",
    "https://p1.pxfuel.com/preview/818/670/574/dogs-chihuahua-rest-small-fur-cozy.jpg",
    "https://p0.pxfuel.com/preview/961/674/322/podcast-coffee-chocolate-cup.jpg",
  ],
  imageWidth: 300, // 设置图片宽度
  imageHeight: 200, // 设置图片高度
  padding: EdgeInsets.all(8.0), // 设置填充
  border: Border.all(color: Colors.grey, width: 1.0), // 添加边框
  autoPlayInterval: Duration(seconds: 3), // 自动播放间隔时间
  customIndicator: CustomIndicator(), // 自定义指示器
  initialPage: 2, // 初始显示的图片索引
  enableAutoPlay: true, // 启用自动播放
  infiniteScroll: true, // 启用无限滚动
  animationCurve: Curves.easeInOut, // 动画曲线
  activeSlideScale: 1.2, // 活跃图片的缩放比例
  nonActiveSlideScale: 0.9, // 非活跃图片的缩放比例
)

完整示例代码

以下是一个完整的示例代码,展示了如何使用 SlidingImages 插件的不同功能:

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  List<String> imgUrls = [
    "https://p1.pxfuel.com/preview/321/155/730/alpine-bavaria-flowers-germany.jpg",
    "https://p1.pxfuel.com/preview/818/670/574/dogs-chihuahua-rest-small-fur-cozy.jpg",
    "https://p0.pxfuel.com/preview/961/674/322/podcast-coffee-chocolate-cup.jpg",
    "https://p1.pxfuel.com/preview/497/593/209/coffee-winter-warmth-cozy.jpg",
    "https://p1.pxfuel.com/preview/261/554/537/cat-wooden-bench-animal-nature.jpg",
    "https://p1.pxfuel.com/preview/806/13/221/budapest-chain-bridge-danube-hungary-royalty-free-thumbnail.jpg"
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: const Text("插件示例"),
      ),
      body: SingleChildScrollView(
        padding: EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              "最小化功能示例:",
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SlidingImages(
              imgUrls: imgUrls,
            ),
            SizedBox(height: 20),
            Text(
              "自定义示例 1:不同图片尺寸与填充",
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SlidingImages(
              imgUrls: imgUrls,
              imageWidth: 250,
              imageHeight: 150,
              padding: EdgeInsets.all(10.0),
            ),
            SizedBox(height: 20),
            Text(
              "自定义示例 2:自动播放与自定义指示器",
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SlidingImages(
              imgUrls: imgUrls,
              enableAutoPlay: true,
              autoPlayInterval: Duration(seconds: 4),
              customIndicator: CustomIndicator(),
            ),
            SizedBox(height: 20),
            Text(
              "自定义示例 3:边框与缩放效果",
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SlidingImages(
              imgUrls: imgUrls,
              imageWidth: 350,
              imageHeight: 250,
              border: Border.all(color: Colors.grey, width: 2.0),
              activeSlideScale: 1.1,
              nonActiveSlideScale: 0.9,
            ),
          ],
        ),
      ),
    );
  }
}

class CustomIndicator extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 实现自定义指示器小部件
    return Container(
      // 自定义指示器 UI
      width: 10,
      height: 10,
      margin: EdgeInsets.symmetric(horizontal: 2),
      decoration: BoxDecoration(
        shape: BoxShape.circle,
        color: Colors.blue,
      ),
    );
  }
}

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

1 回复

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


sliding_images 是一个用于在 Flutter 应用中实现轮播图片展示的插件。它允许你轻松地创建自动滑动的图片轮播效果。以下是使用 sliding_images 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 sliding_images 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  sliding_images: ^0.0.1  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 sliding_images 插件:

import 'package:sliding_images/sliding_images.dart';

3. 使用 SlidingImages 组件

你可以在你的 Flutter 应用中使用 SlidingImages 组件来展示轮播图片。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Sliding Images Demo'),
        ),
        body: SlidingImages(
          images: [
            'https://via.placeholder.com/350x150',
            'https://via.placeholder.com/350x150',
            'https://via.placeholder.com/350x150',
            'https://via.placeholder.com/350x150',
          ],
          autoPlay: true,
          autoPlayInterval: Duration(seconds: 3),
          indicatorColor: Colors.blue,
          selectedIndicatorColor: Colors.red,
          height: 200.0,
        ),
      ),
    );
  }
}

4. 参数说明

SlidingImages 组件支持以下参数:

  • images: 一个包含图片 URL 或本地图片路径的列表。
  • autoPlay: 是否自动播放,默认为 true
  • autoPlayInterval: 自动播放的时间间隔,默认为 Duration(seconds: 3)
  • indicatorColor: 轮播指示器的颜色。
  • selectedIndicatorColor: 当前选中图片的指示器颜色。
  • height: 轮播组件的高度。

5. 运行应用

保存你的代码并运行应用,你将看到一个自动轮播的图片展示效果。

6. 自定义

你可以根据需要自定义 SlidingImages 组件的外观和行为。例如,你可以调整图片的宽高比、添加边框、设置背景颜色等。

SlidingImages(
  images: [
    'assets/images/image1.jpg',
    'assets/images/image2.jpg',
    'assets/images/image3.jpg',
  ],
  autoPlay: true,
  autoPlayInterval: Duration(seconds: 2),
  indicatorColor: Colors.grey,
  selectedIndicatorColor: Colors.blue,
  height: 300.0,
  borderRadius: BorderRadius.circular(10.0),
  fit: BoxFit.cover,
),

7. 处理网络图片

如果你使用的是网络图片,建议使用 cached_network_image 插件来缓存图片,以提高性能并减少网络请求。

dependencies:
  cached_network_image: ^3.0.0

然后在 SlidingImages 中使用 CachedNetworkImage

SlidingImages(
  images: [
    CachedNetworkImage(imageUrl: 'https://via.placeholder.com/350x150'),
    CachedNetworkImage(imageUrl: 'https://via.placeholder.com/350x150'),
    CachedNetworkImage(imageUrl: 'https://via.placeholder.com/350x150'),
  ],
  autoPlay: true,
  autoPlayInterval: Duration(seconds: 3),
  indicatorColor: Colors.blue,
  selectedIndicatorColor: Colors.red,
  height: 200.0,
),

8. 处理本地图片

如果你使用的是本地图片,可以直接使用 AssetImage

SlidingImages(
  images: [
    AssetImage('assets/images/image1.jpg'),
    AssetImage('assets/images/image2.jpg'),
    AssetImage('assets/images/image3.jpg'),
  ],
  autoPlay: true,
  autoPlayInterval: Duration(seconds: 3),
  indicatorColor: Colors.blue,
  selectedIndicatorColor: Colors.red,
  height: 200.0,
),

9. 处理错误

如果图片加载失败,你可以设置一个占位符或错误图片:

SlidingImages(
  images: [
    CachedNetworkImage(
      imageUrl: 'https://via.placeholder.com/350x150',
      placeholder: (context, url) => CircularProgressIndicator(),
      errorWidget: (context, url, error) => Icon(Icons.error),
    ),
    // 其他图片
  ],
  autoPlay: true,
  autoPlayInterval: Duration(seconds: 3),
  indicatorColor: Colors.blue,
  selectedIndicatorColor: Colors.red,
  height: 200.0,
),
回到顶部