Flutter自动调整图片大小插件auto_resize_image的使用

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

Flutter自动调整图片大小插件auto_resize_image的使用

AutoResizeImage

pub package

语言: 简体中文

根据容器的大小自动调整图片缓存大小。

特性

支持多种类型的ImageProvider,包括NetworkImageAssetImageFileImage等。

支持<a href="https://pub.dev/packages/cached_network_image">CachedNetworkImageProvider</a>

debugInvertOversizedImages = false debugInvertOversizedImages = true
Screenshot_20240227-183452.jpg Screenshot_20240228-095622.jpg

使用方法

dependencies:
  auto_resize_image: ^1.0.0
SizedBox(
  width: 200,
  height: 200,
  child: LayoutBuilder(
    builder: (BuildContext context, BoxConstraints constraints) {
      return Image(
        fit: BoxFit.cover,
        image: AutoResizeImage(
          imageProvider: CachedNetworkImageProvider(url),
          width: constraints.maxWidth,
          height: constraints.maxHeight,
        ),
      );
    },
  ),
),

额外信息

绿色框表示容器的大小,红色框表示图片缓存的大小。

ResizeMode 图解 清晰度/内存使用 超出尺寸
contain
balance 20240227_165706.jpg
cover 20240227_165733.jpg

完整示例代码

以下是一个完整的示例代码,展示了如何在应用中使用AutoResizeImage插件。

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

import 'generated/assets.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'AutoResizeImage Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const ImagePage(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    var url = "https://s2.loli.net/2024/02/27/yHRMwZr9lnjc7z4.jpg";
    debugInvertOversizedImages = true;
    return Scaffold(
      appBar: AppBar(title: const Text('AutoResizeImage Demo')),
      body: Wrap(
        children: [
          _buildImage(text: 'CachedNetworkImage', imageProvider: CachedNetworkImageProvider(url)),
          _buildImage(text: 'NetworkImage', imageProvider: NetworkImage(url)),
          _buildImage(text: 'AssetsImage contain', imageProvider: const AssetImage(Assets.assetsAa), resizeMode: ResizeMode.contain),
          _buildImage(text: 'AssetsImage balance', imageProvider: const AssetImage(Assets.assetsAa), resizeMode: ResizeMode.balance),
          _buildImage(text: 'AssetsImage cover', imageProvider: const AssetImage(Assets.assetsAa), resizeMode: ResizeMode.cover),
          _buildImage(text: 'Long image cover', imageProvider: const AssetImage(Assets.assetsLong)),
        ],
      ),
    );
  }

  Widget _buildImage({
    required String text,
    required ImageProvider imageProvider,
    ResizeMode resizeMode = ResizeMode.balance,
  }) {
    return Column(
      children: [
        SizedBox(
          width: 180,
          height: 180,
          child: LayoutBuilder(
            builder: (BuildContext context, BoxConstraints constraints) {
              return Image(
                fit: BoxFit.cover,
                image: AutoResizeImage(
                  resizeMode: resizeMode,
                  imageProvider: imageProvider,
                  width: constraints.maxWidth,
                  height: constraints.maxHeight,
                ),
              );
            },
          ),
        ),
        Text(text)
      ],
    );
  }
}

更多关于Flutter自动调整图片大小插件auto_resize_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动调整图片大小插件auto_resize_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用auto_resize_image插件来自动调整图片大小的代码示例。auto_resize_image插件能够根据父容器的尺寸自动调整图片的显示大小,非常适合在响应式布局中使用。

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

dependencies:
  flutter:
    sdk: flutter
  auto_resize_image: ^3.0.0+3  # 请根据需要替换为最新版本

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

接下来,在你的Dart文件中使用AutoResizeImage组件。以下是一个简单的示例,展示如何在Flutter应用中自动调整图片大小:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Auto Resize Image Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // 使用AutoResizeImage组件
              AutoResizeImage.network(
                'https://via.placeholder.com/600',
                width: double.infinity,  // 宽度设为父容器宽度
              ),
              SizedBox(height: 20),
              AutoResizeImage.asset(
                'assets/my_image.png',  // 替换为你的本地图片路径
                height: 300,  // 高度设为固定值
              ),
            ],
          ),
        ),
      ),
    );
  }
}

代码解释:

  1. 导入依赖:首先导入auto_resize_image包。
  2. 网络图片
    • 使用AutoResizeImage.network方法加载网络图片。
    • width: double.infinity表示图片的宽度将扩展至父容器的宽度,高度将按比例自动调整。
  3. 本地图片
    • 使用AutoResizeImage.asset方法加载本地图片。
    • height: 300表示图片的高度固定为300像素,宽度将按比例自动调整。

注意事项:

  • 确保你已经在pubspec.yaml中声明了所有本地图片资源。
  • AutoResizeImage组件支持多种配置,如placeholdererrorWidget等,可以根据需要自行配置。

通过上述代码,你可以在Flutter应用中轻松实现图片的自动调整大小功能。

回到顶部