Flutter图片选择功能插件image_picker_widget的使用

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

Flutter图片选择功能插件image_picker_widget的使用

image_picker_widget 是一个用于Flutter项目的插件,它集成了 image_picker 和简单的Flutter小部件,允许你在不影响设计代码开发的情况下编辑图像。以下是关于如何使用此插件的详细指南。

依赖添加

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

dependencies:
  # 其他依赖...
  image_picker_widget: '>=2.0.0 <3.0.0'

如果你使用的是预空安全版本,请确保使用版本 1.0.3

安装配置

iOS

对于iOS平台,在 <project root>/ios/Runner/Info.plist 文件中添加以下键值对以请求必要的权限:

  • NSPhotoLibraryUsageDescription:描述应用程序需要照片库访问权限的原因。
  • NSCameraUsageDescription:描述应用程序需要相机访问权限的原因。
  • NSMicrophoneUsageDescription(如果你打算录制视频):描述应用程序需要麦克风访问权限的原因。

Android

Image Picker 配置

从v1.2.0开始,你需要将Android项目迁移到v2嵌入式(详情)。对于 image_picker ,无需额外配置,插件应该可以开箱即用。

Image Cropper 配置

AndroidManifest.xml 中添加 UCropActivity

<activity
    android:name="com.yalantis.ucrop.UCropActivity"
    android:screenOrientation="portrait"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>

参数说明

必需参数

属性 描述 类型
diameter 包含图像容器的直径 double

可选参数

属性 描述 类型
initialImage 初始显示的图像,可以是 ImageProviderFile 或者外部URL (String) dynamic
isEditable 是否可以更改图像 bool
shouldCrop 是否可以编辑和裁剪图像,默认为false bool
onChange 如果图像可以更改,此函数将在更改后被调用 void Function(File)
fit 图像如何适应容器 BoxFit

自定义选项

Image Picker Widget

属性 描述 类型
shape 小部件形状 [square 或 circle] ImagePickerWidgetShape
backgroundColor 小部件背景色,默认为 Colors.grey[500] Color
radius square 图像的圆角,默认为 Radius.all(8) Radius
editIcon 引用编辑可能性的小部件 Widget
iconAlignment 编辑图标的位置,默认为居中 AlignmentGeometry

Modal image type picker

属性 描述 类型
modalOptions.title 标题,默认为 “Select:” Widget
modalOptions.cameraIcon 相机图标,默认为 Icons.camera IconData
modalOptions.cameraText 相机标签,默认为 “camera” Widget
modalOptions.cameraSize 相机图标大小,默认为 40 double
modalOptions.cameraColor 相机图标颜色,默认为主色调 Color
modalOptions.galleryIcon 相册图标,默认为 Icons.collections IconData
modalOptions.galleryText 相册标签,默认为 “gallery” Widget
modalOptions.gallerySize 相册图标大小,默认为 40 double
modalOptions.galleryColor 相册图标颜色,默认为主色调 Color

你可以通过 imagePickerModal 来创建自定义的模态框:

imagePickerModal: (context, selectCamera, selectGallery) => BottomSheet(
  onClosing: () => print('Nothing'),
  builder: (context) => Padding(
    padding: const EdgeInsets.all(16),
    child: Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: [
        ElevatedButton(onPressed: () => selectCamera(context), child: Text("Camera")),
        SizedBox(height: 20),
        ElevatedButton(onPressed: () => selectGallery(context), child: Text("Gallery")),
      ],
    ),
  ),
),

Image Picker Options

属性 描述 类型
maxWidth 最大宽度 int
maxHeight 最大高度 int
imageQuality 图像质量,范围0-100 int
preferredCameraDevice 指定使用哪个摄像头,仅当source为ImageSource.camera时有效 CameraDevice

Image Cropping Options

属性 描述 类型
maxWidth 最大裁剪宽度 int
maxHeight 最大裁剪高度 int
aspectRatio 控制裁剪区域的宽高比 CropAspectRatio
aspectRatioPresets 控制裁剪菜单视图中的宽高比列表 List
cropStyle 控制裁剪区域样式 CropStyle
compressFormat 结果图像格式,png或jpg ImageCompressFormat
compressQuality 压缩质量,范围0-100 int
androidUiSettings 控制Android上的UI定制 AndroidUiSettings
iosUiSettings 控制iOS上的UI定制 IOSUiSettings

示例代码

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

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker_widget/image_picker_widget.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,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String? title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title ?? ""),
      ),
      body: Center(
        child: ImagePickerWidget(
          diameter: 180,
          initialImage: "https://strattonapps.com/wp-content/uploads/2020/02/flutter-logo-5086DD11C5-seeklogo.com_.png",
          shape: ImagePickerWidgetShape.circle,
          isEditable: true,
          shouldCrop: true,
          imagePickerOptions: ImagePickerOptions(
            imageQuality: 65,
          ),
          onChange: (File file) {
            print("I changed the file to: ${file.path}");
          },
        ),
      ),
    );
  }
}

以上代码展示了如何创建一个带有圆形头像的选择器,并且可以选择从相册或相机获取图片,同时支持图片编辑和裁剪功能。

如果有任何问题或者需要进一步的帮助,请随时查看 GitHub issue 页面。


更多关于Flutter图片选择功能插件image_picker_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图片选择功能插件image_picker_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter应用中使用image_picker_widget插件来实现图片选择功能的代码案例。这个插件提供了更丰富的UI组件来选择图片,相比于官方提供的image_picker插件。

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

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

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

接下来,是一个完整的示例代码,展示如何在Flutter应用中集成并使用image_picker_widget来选择图片:

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

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

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

class ImagePickerScreen extends StatefulWidget {
  @override
  _ImagePickerScreenState createState() => _ImagePickerScreenState();
}

class _ImagePickerScreenState extends State<ImagePickerScreen> {
  File? _selectedImage;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Picker Widget Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _selectedImage == null
                ? Text('No image selected.')
                : Image.file(_selectedImage!),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => _pickImage(context),
              child: Text('Select Image'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _pickImage(BuildContext context) async {
    final result = await ImagePickerWidget.pickImage(
      context,
      width: 800,
      height: 800,
      enableCamera: true,
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(12),
      ),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            'Select an image',
            style: TextStyle(color: Colors.black, fontSize: 18),
          ),
          SizedBox(height: 20),
          CircularProgressIndicator(),
        ],
      ),
    );

    if (result != null && result.path != null) {
      setState(() {
        _selectedImage = File(result.path!);
      });
    }
  }
}

代码说明

  1. 依赖引入:在pubspec.yaml中添加image_picker_widget依赖。
  2. 主应用MyApp类定义了应用的主入口,设置了应用的主题和主页。
  3. 主页ImagePickerScreen是一个有状态的Widget,用于展示选择的图片和选择图片的按钮。
  4. 选择图片_pickImage方法使用ImagePickerWidget.pickImage来打开图片选择器。这里可以自定义选择器的宽度、高度、是否启用相机以及自定义UI组件。
  5. 显示图片:如果选择了图片,_selectedImage将被更新,并在页面上显示。

注意事项

  • 确保在真实设备或模拟器上运行应用,因为图片选择器依赖于设备的文件系统。
  • 权限管理:在实际应用中,记得处理图片选择所需的权限(如访问相机和存储)。

这个示例展示了如何使用image_picker_widget插件来增强图片选择功能,并提供了自定义UI的选项。希望这对你有帮助!

回到顶部