Flutter图片选择插件simple_ios_image_picker的使用

Flutter图片选择插件simple_ios_image_picker的使用

简介

simple_ios_image_picker 是一个用于在Flutter应用中选择图片的插件,它修复了一些原生 image_picker 插件中存在的问题。例如,它解决了某些iOS设备上图片选择时出现的问题。

完整示例Demo

以下是一个完整的示例代码,展示了如何使用 simple_ios_image_picker 插件来选择并显示图片。该示例包含了一个按钮,点击后可以选择一张图片,并将其显示在界面上。

import 'dart:async';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:simple_ios_image_picker/simple_ios_image_picker.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> {
  // 创建一个 SimpleIosImagePicker 实例
  final _simpleIosImagePickerPlugin = SimpleIosImagePicker();
  
  // 用于存储选中的图片数据
  List<Uint8List>? pickedFileList;

  // 选择单张图片的方法
  Future<void> pickSingleImage(
    double compressionQuality, // 压缩质量,范围为0-1
    int width, // 图片的最大宽度
    int height, // 图片的最大高度
  ) async {
    // 调用插件的 pickImagesAsByData 方法选择图片
    final fileList = await _simpleIosImagePickerPlugin.pickImagesAsByData(
      compressionQuality: compressionQuality,
      maxWidth: width,
      maxHeight: height,
    );
    
    // 更新状态,将选中的图片数据保存到 pickedFileList 中
    setState(() {
      pickedFileList = fileList;
    });
  }

  // 显示选中的图片
  Widget images() {
    final imageList = pickedFileList;
    
    // 如果没有选中图片,则返回一个空的 SizedBox
    if (imageList == null) return const SizedBox.shrink();

    // 如果有图片,则显示图片
    if (imageList.isNotEmpty) {
      print('imageBytes: ${imageList.first.lengthInBytes}'); // 打印图片的字节大小
      return SingleChildScrollView(
        scrollDirection: Axis.horizontal, // 横向滚动
        child: Row(
          children: imageList
              .map(
                (image) => Image.memory( // 使用 Image.memory 显示图片
                  image,
                  width: 200, // 设置图片宽度
                  height: 200, // 设置图片高度
                ),
              )
              .toList(),
        ),
      );
    } else {
      // 如果没有图片,则显示提示文本
      return const Text('No image picked.');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Welcome'), // 设置应用栏标题
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center, // 居中对齐
          children: [
            Center(child: images()), // 显示选中的图片
            const SizedBox(height: 40), // 添加间距
            ElevatedButton(
              onPressed: () => pickSingleImage(0.1, 100, 200), // 点击按钮选择图片
              child: const Text('pick image'), // 按钮文本
            )
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用simple_ios_image_picker插件来选择图片的示例代码。simple_ios_image_picker是一个专门用于iOS平台的图片选择插件,因此确保你仅在iOS设备上测试和运行此代码。

步骤1:添加依赖

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

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

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

步骤2:配置iOS项目

由于simple_ios_image_picker仅支持iOS,你需要在ios/Runner/Info.plist文件中添加对相册访问的权限请求:

<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问您的相册</string>

步骤3:编写Flutter代码

接下来,在你的Dart文件中导入simple_ios_image_picker并编写选择图片的代码。

import 'package:flutter/material.dart';
import 'package:simple_ios_image_picker/simple_ios_image_picker.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? _selectedImage;

  Future<void> _pickImage() async {
    try {
      final result = await SimpleIosImagePicker.pickImage(
        sourceType: ImageSourceType.photoLibrary,  // 可以选择 photoLibrary 或 camera
      );
      if (result != null && result.path != null) {
        setState(() {
          _selectedImage = File(result.path!);
        });
      }
    } catch (e) {
      print('Error picking image: $e');
    }
  }

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

代码解释

  1. 导入依赖

    • import 'package:simple_ios_image_picker/simple_ios_image_picker.dart';
  2. 定义主函数

    • void main() => runApp(MyApp());
  3. 创建主应用和无状态小部件

    • MyApp是一个无状态小部件,它创建了ImagePickerScreen
  4. 创建有状态小部件

    • ImagePickerScreen是一个有状态小部件,它包含选择图片的逻辑。
  5. 选择图片函数

    • _pickImage函数使用SimpleIosImagePicker.pickImage方法来选择图片。如果成功,它将更新_selectedImage状态。
  6. UI布局

    • 使用ScaffoldCenterColumnImage.fileElevatedButton来创建UI。
    • 如果已选择图片,则显示图片;否则显示文本“No image selected.”。

注意

  • 确保仅在iOS上运行此代码,因为simple_ios_image_picker不支持Android。
  • 在实际项目中,你可能需要处理更多的错误情况,比如用户拒绝访问相册权限。

这样,你就可以在Flutter项目中使用simple_ios_image_picker来选择图片了。

回到顶部