Flutter图片选择插件image_picker_totalxsoftware的使用

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

Flutter图片选择插件image_picker_totalxsoftware的使用

介绍

ImagePickerTotalxsoftware 是一个Flutter插件,用于处理高级的图片选择、裁剪、压缩和上传功能,并且支持与Firebase集成。该插件简化了从相机或相册中选择图片、裁剪图片以及将图片上传到Firebase Storage的过程。

功能

  • 单张图片选择:从相机或相册中选择一张图片。
  • 多张图片选择:一次选择多张图片。
  • 图片裁剪:支持自定义纵横比裁剪图片。
  • Firebase上传:直接将图片上传到Firebase Storage。
  • 图片压缩:在上传前压缩图片。
  • 图片删除:从Firebase Storage中删除单张或多张图片。

安装

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

dependencies:
  image_picker_totalxsoftware: ^1.0.0

使用

导入插件

在Dart文件中导入插件:

import 'package:image_picker_totalxsoftware/image_picker_totalxsoftware.dart';

权限设置

Android

AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-permission android:name="android.permission.CAMERA" />
iOS

Info.plist 文件中添加以下键值:

<key>NSPhotoLibraryUsageDescription</key>
<string>我们需要访问您的相册以选择图片。</string>
<key>NSCameraUsageDescription</key>
<string>我们需要访问您的相机以拍摄照片。</string>
<!-- <key>NSPhotoLibraryAddUsageDescription</key>
<string>我们需要权限将编辑后的图片保存到您的相册。</string> -->

示例代码

以下是一个完整的示例代码,展示了如何使用 image_picker_totalxsoftware 插件进行图片选择、裁剪、上传和删除操作。

import 'dart:developer';

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Image Picker and Uploader'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const SizedBox(height: 10),
              // 单张图片选择
              ElevatedButton(
                onPressed: () async {
                  final file = await ImagePickerTotalxsoftware.pickImage(
                    source: ImageSource.gallery,
                    onError: (e) {
                      log("选择图片时出错: $e");
                    },
                  );

                  if (file != null) {
                    log("选择的图片路径: $file");
                  }
                },
                child: const Text('选择图片'),
              ),
              const SizedBox(height: 10),
              // 选择并裁剪图片
              ElevatedButton(
                onPressed: () async {
                  final path = await ImagePickerTotalxsoftware.pickAndCropImage(
                    context,
                    aspectRatioPresets: [
                      CropAspectRatioPreset.ratio7x5,
                      CropAspectRatioPreset.square,
                    ],
                    onError: (e) {
                      log("裁剪图片时出错: $e");
                    },
                  );
                  if (path != null) {
                    log("裁剪后的图片路径: $path");
                  }
                },
                child: const Text('选择并裁剪图片'),
              ),
              const SizedBox(height: 10),
              // 选择并上传到Firebase Storage
              ElevatedButton(
                onPressed: () async {
                  final url = await ImagePickerTotalxsoftware.pickAndUploadToFirebaseStorage(
                    context,
                    storagePath: 'images',
                    onError: (e) {
                      log("上传图片时出错: $e");
                    },
                  );
                  if (url != null) {
                    log("上传的图片URL: $url");
                  }
                },
                child: const Text('选择图片并上传到Firebase Storage'),
              ),
              const SizedBox(height: 10),
              // 选择、裁剪并上传到Firebase Storage
              ElevatedButton(
                onPressed: () async {
                  final url = await ImagePickerTotalxsoftware.pickCropAndUploadToFirebaseStorage(
                    context,
                    storagePath: 'images',
                    cropStyle: CropStyle.circle,
                    onError: (e) {
                      log("上传裁剪后的图片时出错: $e");
                    },
                  );
                  if (url != null) {
                    log("上传裁剪后的图片URL: $url");
                  }
                },
                child: const Text(
                  '选择图片、裁剪并上传到Firebase Storage',
                  textAlign: TextAlign.center,
                ),
              ),
              const SizedBox(height: 10),
              // 多张图片选择
              ElevatedButton(
                onPressed: () async {
                  final paths = await ImagePickerTotalxsoftware.pickMultipleImage(
                    context,
                    maxImageCount: 5,
                    onError: (e) {
                      log("选择多张图片时出错: $e");
                    },
                  );
                  if (paths.isNotEmpty) {
                    log("选择的图片路径: ${paths.toString()}");
                  }
                },
                child: const Text('选择多张图片'),
              ),
              const SizedBox(height: 10),
              // 多张图片选择并裁剪
              ElevatedButton(
                onPressed: () async {
                  final paths = await ImagePickerTotalxsoftware.pickMultipleImageAndCrop(
                    context,
                    maxImageCount: 5,
                    aspectRatioPresets: [
                      CropAspectRatioPreset.ratio7x5,
                      CropAspectRatioPreset.ratio4x3,
                    ],
                    cropStyle: CropStyle.rectangle,
                    onError: (e) {
                      log("裁剪多张图片时出错: $e");
                    },
                  );
                  if (paths.isNotEmpty) {
                    log("裁剪后的图片路径: ${paths.toString()}");
                  }
                },
                child: const Text('选择多张图片并裁剪'),
              ),
              const SizedBox(height: 10),
              // 上传图片到Firebase Storage
              ElevatedButton(
                onPressed: () async {
                  final url = await ImagePickerTotalxsoftware.uploadToFirebaseStorage(
                    filepath: 'path/to/file.png',
                    storagePath: 'images',
                    onError: (e) {
                      log("上传图片时出错: $e");
                    },
                  );
                  if (url != null) {
                    log("上传的图片URL: $url");
                  }
                },
                child: const Text(
                  '上传图片到Firebase Storage',
                ),
              ),
              const SizedBox(height: 10),
              // 上传多张图片到Firebase Storage
              ElevatedButton(
                onPressed: () async {
                  final urls = await ImagePickerTotalxsoftware.uploadMultipleToFirebaseStorage(
                    filepathList: [
                      'path/to/file1.png',
                      'path/to/file2.png',
                      'path/to/file3.png',
                    ],
                    storagePath: 'images',
                    onError: (e) {
                      log("上传多张图片时出错: $e");
                    },
                  );
                  if (urls.isNotEmpty) {
                    log("上传的图片URL: ${urls.toString()}");
                  }
                },
                child: const Text(
                  '上传多张图片到Firebase Storage',
                ),
              ),
              const SizedBox(height: 10),
              // 从Firebase Storage删除图片
              ElevatedButton(
                onPressed: () async {
                  try {
                    await ImagePickerTotalxsoftware.deleteImageFromFirebaseByUrl('https://firebasestorage.googleapis.com/v0/b/your-app-id/o/uploads/image.jpeg');
                    log("图片删除成功");
                  } on Exception catch (e) {
                    log("删除图片时出错: $e");
                  }
                },
                child: const Text(
                  '从Firebase Storage删除图片',
                ),
              ),
              const SizedBox(height: 10),
              // 从Firebase Storage删除多张图片
              ElevatedButton(
                onPressed: () async {
                  try {
                    await ImagePickerTotalxsoftware.deleteMultipleImagesFromFirebaseByUrls([
                      'https://firebasestorage.googleapis.com/v0/b/your-app-id/o/uploads/image1.jpeg',
                      'https://firebasestorage.googleapis.com/v0/b/your-app-id/o/uploads/image2.jpeg',
                      'https://firebasestorage.googleapis.com/v0/b/your-app-id/o/uploads/image3.jpeg',
                    ]);
                    log("多张图片删除成功");
                  } on Exception catch (e) {
                    log("删除多张图片时出错: $e");
                  }
                },
                child: const Text(
                  '从Firebase Storage删除多张图片',
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用image_picker_totalxsoftware插件来选择图片的示例代码。这个插件是一个流行的图片选择器,它允许用户从设备相册中选择图片或拍照。

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

dependencies:
  flutter:
    sdk: flutter
  image_picker_totalxsoftware: ^latest_version  # 请替换为最新版本号

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

接下来,在你的Dart文件中导入该插件,并实现图片选择功能。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ImagePickerScreen(),
    );
  }
}

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

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

  final ImagePicker _picker = ImagePicker();

  Future<void> _pickImage(ImageSource source) async {
    final PickedFile? pickedFile = await _picker.pickImage(source: source);

    if (pickedFile != null) {
      setState(() {
        _pickedImage = File(pickedFile.path);
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Picker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (_pickedImage != null)
              Image.file(
                _pickedImage!,
                width: 300,
                height: 300,
                fit: BoxFit.cover,
              ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () => _pickImage(ImageSource.gallery),
              child: Text('Choose from Gallery'),
            ),
            SizedBox(height: 10),
            ElevatedButton(
              onPressed: () => _pickImage(ImageSource.camera),
              child: Text('Take a Photo'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个ImagePickerScreen,它有两个按钮:一个用于从设备相册中选择图片,另一个用于拍照。

  • _pickImage方法接收一个ImageSource参数,该参数可以是ImageSource.gallery(相册)或ImageSource.camera(相机)。
  • 当用户点击按钮时,_pickImage方法会被调用,并显示相应的图片选择器。
  • 如果用户选择了一张图片,该图片将被显示在屏幕上。

请注意,使用相机功能需要在AndroidManifest.xmlInfo.plist文件中添加相应的权限声明。对于iOS,你还需要在Xcode项目中启用相机使用权限。

这是一个基本的示例,你可以根据需要进行扩展和修改。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!