Flutter图片缓存与网络加载插件morpheme_cached_network_image的使用

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

Flutter图片缓存与网络加载插件morpheme_cached_network_image的使用

morpheme_cached_network_image 是一个用于显示网络图片并将其保存在缓存目录中的Flutter库,支持Objectbox进行数据管理。本文将介绍如何使用该插件。

如何使用

初始化

首先,在应用启动时初始化 MorphemeCachedNetworkImageManager

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await MorphemeCachedNetworkImageManager.instance.init();

  runApp(const MyApp());
}

显示带加载动画的图片

你可以直接使用 MorphemeCachedNetworkImage 来显示图片,并设置加载和错误处理的回调函数:

MorphemeCachedNetworkImage(
  imageUrl: 'https://picsum.photos/id/2/200',
  loadingBuilder: (context) => const CircularProgressIndicator(),
  errorBuilder: (context, error, stackTrace) => const Icon(Icons.error),
);

使用 ImageProvider

你也可以通过 ImageProvider 来加载图片:

Image(image: MorphemeCachedNetworkImageProvider('https://picsum.photos/id/2/200'))

设置背景图片

当需要将图片作为背景时,可以使用 ContainerDecorationImage

Container(
    width: 200,
    height: 200,
    decoration: BoxDecoration(
        image: DecorationImage(
            image: MorphemeCachedNetworkImageProvider(
            'https://picsum.photos/id/2/200',
            ),
        ),
    ),
)

完整示例代码

以下是一个完整的示例,展示了如何在一个网格视图中显示1000张不同的图片:

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:morpheme_cached_network_image/morpheme_cached_network_image.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  debugInvertOversizedImages = kDebugMode;

  await MorphemeCachedNetworkImageManager.instance.init();

  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Morpheme Cached Network Image Example'),
    );
  }
}

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

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: GridView.count(
        crossAxisCount: 4,
        mainAxisSpacing: 8,
        crossAxisSpacing: 8,
        children: [
          for (var i = 0; i < 1000; i++)
            MorphemeCachedNetworkImage(
              imageUrl: 'https://picsum.photos/id/$i/1000/1000',
              width: double.infinity,
              height: double.infinity,
              fit: BoxFit.cover,
            ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用morpheme_cached_network_image插件进行图片缓存和网络加载的示例代码。这个插件结合了图片加载和缓存的功能,非常适合需要高效管理图片资源的场景。

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

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

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

接下来,在你的Dart文件中,你可以这样使用morpheme_cached_network_image

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

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    String imageUrl = 'https://example.com/image.jpg';  // 替换为你的图片URL

    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,
        ),
      ),
    );
  }
}

在这个示例中:

  • CachedNetworkImagemorpheme_cached_network_image插件提供的主要组件,用于加载和缓存网络图片。
  • imageUrl是你想要加载的图片的URL。
  • placeholder是一个在图片加载时显示的占位符,这里使用了CircularProgressIndicator
  • errorWidget是在图片加载失败时显示的组件,这里使用了Icon(Icons.error)
  • fit属性定义了图片如何适应其容器的大小。
  • widthheight属性定义了图片的显示尺寸。

这个插件还提供了很多其他配置选项,比如自定义缓存目录、缓存大小限制等,你可以根据具体需求查阅官方文档进行更深入的配置。

回到顶部