Flutter图像选择器插件drishya_picker的使用

Flutter图像选择器插件drishya_picker的使用

Platform Pub Package likes Forks


这是一个Flutter包,它模仿了Facebook Messenger的图库选择器和相机功能,并将它们合并为一个组件。图库视图和相机视图也可以作为Flutter小部件使用。在底层,drishya_picker 使用了Photo ManagerCamera


目录


安装

1. 添加依赖

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

dependencies:
  drishya_picker: ^latest_version
2. 安装它

你可以通过命令行来安装包:

使用 pub:

$ pub get

使用 Flutter:

$ flutter pub get
3. 导入它

现在可以在Dart代码中使用:

import 'package:drishya_picker/drishya_picker.dart';

平台设置

对于更多细节(如果需要),你可以查看 Photo ManagerCamera 的文档部分。

Android

将最低Android SDK版本改为21(或更高)在你的android/app/build.gradle文件中。

minSdkVersion 21

所需的权限:INTERNET, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, ACCESS_MEDIA_LOCATION。 如果你不需要 ACCESS_MEDIA_LOCATION 权限, 参见禁用 ACCESS_MEDIA_LOCATION 权限

Glide

Android原生使用Glide创建图像缩略图字节,版本为4.11.0。

如果你的其他Android库使用了该库,且版本不同,则需要编辑你的Android项目的build.gradle文件。

rootProject.allprojects {

    subprojects {
        project.configurations.all {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'com.github.bumptech.glide'
                        && details.requested.name.contains('glide')) {
                    details.useVersion '4.11.0'
                }
            }
        }
    }
}

如果你想要使用ProGuard,可以参见Glide的ProGuard

移除媒体位置权限

Android默认包含 ACCESS_MEDIA_LOCATION 权限。

此权限是在Android Q中引入的。如果你的应用不需要此权限,你需要在应用的Android清单中添加以下节点:

<uses-permission
  android:name="android.permission.ACCESS_MEDIA_LOCATION"
  tools:node="remove"
/>

如果你发现有关于 Glide 的警告日志, 那么主项目需要实现 AppGlideModule。 参见生成API

iOS

info.plist中添加以下内容:

<key>NSPhotoLibraryUsageDescription</key>
<string>Replace with your permission description..</string>
<key>NSCameraUsageDescription</key>
<string>Replace with your permission description..</string>
<key>NSMicrophoneUsageDescription</key>
<string>Replace with your permission description..</string>

图库

  1. 使用 SlidableGallery 使图库视图可滑动,否则忽略它。
class PickerDemo extends StatelessWidget {
 late final GalleryController controller;

 ...

 @override
 Widget build(BuildContext context) {
   return SlidableGallery(
     controller: controller,
     child: Scaffold(
       body: ...
     ),
   );
 }
}
  1. GallerySetting 可用于在选择媒体时进行额外设置。
class PickerDemo extends StatelessWidget {
  late final GalleryController controller;

  @override
  void initState() {
    super.initState();
    controller = GalleryController();
  }

    
  final _gallerySetting = GallerySetting(
      enableCamera: true,
      maximumCount: 10,
      requestType: RequestType.all,
      editorSetting: EditorSetting(colors: _colors, stickers: _stickers1),
      cameraSetting: const CameraSetting(videoDuration: Duration(seconds: 15)),
      cameraTextEditorSetting: EditorSetting(
        backgrounds: _defaultBackgrounds,
        colors: _colors.take(4).toList(),
        stickers: _stickers2,
      ),
      cameraPhotoEditorSetting: EditorSetting(
        colors: _colors.skip(4).toList(),
        stickers: _stickers3,
      ),
    );

  ...

  onPressed : () async {
    final entities = await controller.pick(context,setting:setting);
  }

  ...
}
  1. 使用 GalleryViewField 类似于Flutter的 TextField 来选择媒体。(推荐方法,因为它已经处理了控制器的创建和销毁)
GalleryViewField(
  selectedEntities: [],
  onChanged: (entity, removed) {
     ...
  },
  onSubmitted: (list) {
     ...
  }
  child: const Icon(Icons.camera),
),
  1. 你也可以将 GalleryView 作为一个 Widget 使用。
  2. 浏览示例应用程序以获取更深入的实现和定制。

相机

  1. 使用 CameraViewpick() 函数来选择媒体。
...
onPressed : () async {
  final entity = await CameraView.pick();
}
...
  1. 使用 CameraViewField 类似于Flutter的 TextField 来选择媒体。
GalleryViewField(
  onCapture: (entity) {
     ...
  },
  child: const Icon(Icons.camera),
),

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

1 回复

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


当然,以下是如何在Flutter项目中使用drishya_picker图像选择器插件的详细步骤和代码示例。drishya_picker是一个功能强大的图像选择器插件,支持多种图像选择和预览功能。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  drishya_picker: ^latest_version  # 请确保使用最新版本号

运行以下命令来安装依赖:

flutter pub get

2. 导入插件

在你的Dart文件中导入drishya_picker

import 'package:drishya_picker/drishya_picker.dart';

3. 配置权限

由于图像选择器需要访问设备的存储,你需要在AndroidManifest.xmlInfo.plist中配置相关权限。

Android

AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

iOS

Info.plist中添加以下权限:

<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library</string>
<key>NSCameraUsageDescription</key>
<string>We need access to your camera</string>

4. 使用DrishyaPicker

以下是一个完整的示例,展示了如何使用DrishyaPicker来选择图像并显示它们。

import 'package:flutter/material.dart';
import 'package:drishya_picker/drishya_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> {
  List<AssetModel> images = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Drishya Picker Example'),
      ),
      body: Column(
        children: [
          Expanded(
            child: GridView.builder(
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 3,
                crossAxisSpacing: 4.0,
                mainAxisSpacing: 4.0,
              ),
              itemCount: images.length,
              itemBuilder: (context, index) {
                return Image.file(
                  File(images[index].path),
                  fit: BoxFit.cover,
                );
              },
            ),
          ),
          ElevatedButton(
            onPressed: () async {
              List<AssetModel> pickedImages = await DrishyaPicker.pickAssets(
                context: context,
                maxAssets: 10, // 最大选择数量
                assetType: AssetType.image, // 仅选择图片
                requestCode: 100, // 请求码
                pickerConfig: PickerConfig(
                  showSearchBar: true, // 显示搜索框
                  gridColumnCount: 3, // 网格列数
                ),
              );

              if (pickedImages.isNotEmpty) {
                setState(() {
                  images = pickedImages;
                });
              }
            },
            child: Text('Pick Images'),
          ),
        ],
      ),
    );
  }
}

5. 运行应用

完成上述步骤后,你可以运行你的Flutter应用。点击“Pick Images”按钮将打开图像选择器,选择图像后,它们将显示在网格视图中。

注意事项

  • 确保你已经正确配置了所需的权限。
  • 根据需要调整PickerConfig中的参数,以满足你的应用需求。
  • 处理可能发生的错误,例如权限被拒绝的情况。

这就是如何在Flutter项目中使用drishya_picker图像选择器插件的完整示例。希望这对你有帮助!

回到顶部