Flutter图片缓存构建插件cached_network_image_builder的使用

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

Flutter图片缓存构建插件 cached_network_image_builder 的使用

cached_network_image_builder 是一个用于在Flutter应用中缓存网络图片的插件。它通过基本的HTTP请求下载图片,并检查图片是否已经存储,从而避免重复下载。

重要提示

  • 插件只会下载一次图片,这意味着一旦下载后,即使服务器上的图片发生变化,也不会重新下载。

如何使用

基本用法

CachedNetworkImageBuilder(
    url: "https://cdn.pixabay.com/photo/2020/05/17/20/21/cat-5183427_1280.jpg",
    builder: (imageFile) {
        return Center(child: Image.file(imageFile));
    },
),

更多定制化的用法

CachedNetworkImageBuilder(
    url: "misformatted_url_or_url_that_doesn't_contain_image",
    builder: (image) {
        return Center(child: Image.file(image));
    },
    // 可选的占位符小部件,直到从URL加载图像
    placeHolder: LinearProgressIndicator(),
    // 可选的错误小部件
    errorWidget: Image.asset('assets/images/error_image.png'),
    // 可选描述你的图像扩展名,默认值为; jpg, jpeg, gif 和 png
    imageExtensions: ['jpg', 'png'],
),

完整示例Demo

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

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final String title;

  const MyHomePage({super.key, required this.title});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(title)),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: ListView(
          children: <Widget>[
            CachedNetworkImageBuilder(
              url: "misformatted_url_or_url_that_doesn't_contain_image",
              builder: (image) {
                return Center(child: Image.file(image));
              },
              // 可选的占位符小部件,直到从URL加载图像
              placeHolder: const LinearProgressIndicator(),
              // 可选的错误小部件
              errorWidget: Image.asset('assets/images/error_image.png'),
              // 可选描述你的图像扩展名,默认值为; jpg, jpeg, gif 和 png
              imageExtensions: const ['jpg', 'png'],
            ),
            const SizedBox(height: 40),
            CachedNetworkImageBuilder(
              url: "https://cdn.pixabay.com/photo/2020/05/17/20/21/cat-5183427_1280.jpg",
              builder: (image) {
                return Center(child: Image.file(image));
              },
            ),
            const SizedBox(height: 40),
            CachedNetworkImageBuilder(
              url: "https://cdn.pixabay.com/photo/2020/05/30/17/18/wind-power-plant-5239642_1280.jpg",
              builder: (image) {
                return Center(child: Image.file(image));
              },
            ),
          ],
        ),
      ),
    );
  }
}

说明

  • url: 图片的网络地址。
  • builder: 构建函数,接收下载后的图片文件并返回一个显示该图片的小部件。
  • placeHolder: 可选参数,当图片正在加载时显示的占位符小部件。
  • errorWidget: 可选参数,当图片加载失败时显示的错误小部件。
  • imageExtensions: 可选参数,指定支持的图片扩展名,默认为 ['jpg', 'jpeg', 'gif', 'png']

通过以上示例和说明,您可以轻松地在Flutter应用中集成并使用 cached_network_image_builder 插件来缓存和显示网络图片。


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

1 回复

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


当然,以下是一个关于如何使用 cached_network_image_builder 插件在 Flutter 中实现图片缓存构建的示例代码。cached_network_image_builder 是一个基于 cached_network_image 的扩展插件,它提供了更多的灵活性来构建和自定义网络图片的加载和缓存。

首先,确保在 pubspec.yaml 文件中添加依赖项:

dependencies:
  flutter:
    sdk: flutter
  cached_network_image: ^3.1.0  # 确保使用最新版本
  cached_network_image_builder: ^0.1.0  # 假设有一个这样的包版本,请检查最新版本

然后,运行 flutter pub get 来安装这些依赖项。

接下来是一个示例代码,展示了如何使用 cached_network_image_builder 来加载和缓存网络图片:

import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:cached_network_image_builder/cached_network_image_builder.dart';  // 假设包名正确

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

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

class MyHomePage extends StatelessWidget {
  final String imageUrl = 'https://example.com/path/to/your/image.jpg';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cached Network Image Builder Demo'),
      ),
      body: Center(
        child: CachedNetworkImageBuilder(
          imageUrl: imageUrl,
          placeholder: (context, url) => CircularProgressIndicator(),
          errorWidget: (context, url, error) => Icon(Icons.error),
          builder: (context, imageProvider) => Image(
            image: imageProvider,
            fit: BoxFit.cover,
            width: 300,
            height: 200,
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. CachedNetworkImageBuilder 接收一个 imageUrl 参数,这是要加载和缓存的图片的 URL。
  2. placeholder 参数允许你指定一个占位符小部件,在图片加载时显示。这里我们使用了一个 CircularProgressIndicator
  3. errorWidget 参数允许你指定一个错误小部件,当图片加载失败时显示。这里我们使用了一个显示错误的图标。
  4. builder 参数是一个函数,它接收一个 ImageProvider 并返回一个自定义的 Image 小部件。你可以在这里自定义图片的样式和尺寸。

请注意,cached_network_image_builder 可能不是一个真实存在的 Flutter 插件,上述代码假设它存在并类似于 cached_network_image 的使用方式。如果 cached_network_image_builder 实际上不存在,你可以直接使用 cached_network_image 插件,它同样提供了强大的图片缓存和加载功能。以下是一个使用 cached_network_image 的示例:

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

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

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

class MyHomePage extends StatelessWidget {
  final String imageUrl = 'https://example.com/path/to/your/image.jpg';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cached Network Image Demo'),
      ),
      body: Center(
        child: CachedNetworkImage(
          imageUrl: imageUrl,
          placeholder: (context, url) => CircularProgressIndicator(),
          errorWidget: (context, url, error) => Icon(Icons.error),
          fit: BoxFit.cover,
          width: 300,
          height: 200,
        ),
      ),
    );
  }
}

希望这个示例对你有帮助!

回到顶部