Flutter图片缓存与加载插件cached_network_image_plus的使用

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

Flutter图片缓存与加载插件cached_network_image_plus的使用

flutter_cached_network_image_plus 是一个Flutter包,提供了一个自定义的小部件 CacheNetworkImagePlus,用于高效地加载和缓存网络图片,并支持在图片加载时显示闪烁效果(shimmer effect)。

特性

  • 高效地缓存和加载网络图片。
  • 支持在图片加载时显示闪烁效果。
  • 可定制选项,如盒模型适应、尺寸、闪烁颜色等。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  cached_network_image_plus: ^0.0.4

使用

导入包

在你的Dart文件中导入该包:

import 'package:flutter_cached_network_image_plus/flutter_cached_network_image_plus.dart';

使用 CacheNetworkImagePlus 小部件

在你的Flutter应用中使用 CacheNetworkImagePlus 小部件:

CacheNetworkImagePlus(
  imageUrl: 'https://example.com/image.jpg',
  width: 300,
  height: 300,
  // 其他可选参数...
)

参数

  • imageUrl (必需): 网络图片的URL。
  • widthheight: 图片的尺寸。
  • 其他可选参数用于自定义效果。

示例

以下是一个完整的示例,展示了如何在Flutter应用中使用 CacheNetworkImagePlus 小部件:

import 'package:cached_network_image_plus/flutter_cached_network_image_plus.dart';
import 'package:flutter/material.dart';

import 'data.dart'; // 假设你有一个data.dart文件,其中包含图片数据

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("CacheNetworkImagePlus"),
        centerTitle: true,
      ),
      body: Padding(
        padding: EdgeInsets.symmetric(horizontal: 10),
        child: GridView.builder(
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 3,
            childAspectRatio: 1,
          ),
          itemBuilder: (_, i) => CacheNetworkImagePlus(
            imageUrl: dataDefault[i].url,
            margin: EdgeInsets.all(10),
            borderRadius: BorderRadius.circular(20),
            shimmerBaseColor: dataDefault[i].shimmerBaseColor,
            shimmerHighlightColor: dataDefault[i].shimmerHighlightColor,
            shimmerBackColor: dataDefault[i].shimmerBackColor,
            errorWidget: dataDefault[i].errorWidget,
            boxShadow: [
              BoxShadow(
                color: Colors.grey.shade600,
                blurStyle: BlurStyle.outer,
                blurRadius: 10,
              ),
            ],
          ),
          itemCount: dataDefault.length,
        ),
      ),
    );
  }
}

数据文件 data.dart

假设你有一个 data.dart 文件,其中包含图片数据:

class ImageData {
  final String url;
  final Color shimmerBaseColor;
  final Color shimmerHighlightColor;
  final Color shimmerBackColor;
  final Widget errorWidget;

  ImageData({
    required this.url,
    required this.shimmerBaseColor,
    required this.shimmerHighlightColor,
    required this.shimmerBackColor,
    required this.errorWidget,
  });
}

List<ImageData> dataDefault = [
  ImageData(
    url: 'https://example.com/image1.jpg',
    shimmerBaseColor: Colors.grey[300]!,
    shimmerHighlightColor: Colors.grey[100]!,
    shimmerBackColor: Colors.white,
    errorWidget: Icon(Icons.error),
  ),
  ImageData(
    url: 'https://example.com/image2.jpg',
    shimmerBaseColor: Colors.grey[300]!,
    shimmerHighlightColor: Colors.grey[100]!,
    shimmerBackColor: Colors.white,
    errorWidget: Icon(Icons.error),
  ),
  // 添加更多图片数据
];

截图

Screenshot 1

希望这个示例对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter图片缓存与加载插件cached_network_image_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片缓存与加载插件cached_network_image_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中图片缓存与加载插件cached_network_image_plus的使用,这里是一个详细的代码案例展示。cached_network_image_plus是一个强大的Flutter插件,用于从网络上加载和缓存图片。

首先,确保你已经在pubspec.yaml文件中添加了cached_network_image_plus依赖:

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

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

接下来,展示如何在Flutter应用中使用cached_network_image_plus

示例代码

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cached Network Image Plus Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cached Network Image Plus Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            CachedNetworkImage(
              imageUrl: 'https://example.com/image1.jpg',
              placeholder: (context, url) => CircularProgressIndicator(),
              errorWidget: (context, url, error) => Icon(Icons.error),
            ),
            SizedBox(height: 20),
            CachedNetworkImage(
              imageUrl: 'https://example.com/image2.png',
              width: 200,
              height: 200,
              fit: BoxFit.cover,
              placeholder: (context, url) => CircularProgressIndicator(),
              errorWidget: (context, url, error) => Icon(Icons.error),
            ),
            SizedBox(height: 20),
            CachedNetworkImage(
              imageUrl: 'https://example.com/image3.gif',
              placeholder: (context, url) => CircularProgressIndicator(),
              errorWidget: (context, url, error) => Icon(Icons.error),
              imageBuilder: (context, imageProvider) => AnimatedImage(
                imageProvider: imageProvider,
                placeholder: AssetImage('assets/loading.gif'), // 自定义加载动画
                duration: Duration(seconds: 1),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明

  1. 依赖引入

    import 'package:cached_network_image_plus/cached_network_image_plus.dart';
    
  2. CachedNetworkImage组件

    • imageUrl:图片的URL。
    • placeholder:加载图片时的占位符,这里使用CircularProgressIndicator表示加载中。
    • errorWidget:加载图片失败时显示的组件,这里使用Icon(Icons.error)
    • widthheight:图片的宽度和高度。
    • fit:图片适应方式。
    • imageBuilder:自定义图片构建器,可以用于处理GIF动画等特殊情况。
  3. AnimatedImage

    • 用于处理GIF动画的加载,可以通过imageBuilder自定义加载动画的占位符和持续时间。

注意事项

  • 确保图片URL是有效的,否则errorWidget会显示。
  • placeholdererrorWidget可以根据实际需求进行自定义。
  • 如果处理GIF动画,可以使用imageBuilder来自定义加载动画的显示。

通过以上代码示例,你可以在Flutter应用中高效地加载和缓存网络图片,同时提供占位符和错误处理机制,以增强用户体验。

回到顶部