插件介绍

Flutter WeChat Camera Picker 是一个基于微信 UI 风格的相机选择器插件,专为 Flutter 项目设计,支持在鸿蒙平台上运行。该插件提供了丰富的相机功能,包括拍照、录像、曝光调节、缩放控制等,同时保持了与微信一致的用户体验。

主要特性:

  • 💚 完全复刻微信相机 UI 风格
  • 📷 支持高质量图片拍摄
  • 🎥 支持视频录制,可设置录制时长限制
  • ☀️ 支持曝光点设置和调节
  • 🔍 支持捏合缩放和录像时上拉缩放
  • 💱 内置多语言支持(简体中文、English、Tiếng Việt)
  • ♿ 完整的无障碍支持
  • ⚡️ 性能优化,可根据配置调节

安装和配置

通过 Git 引入依赖

由于这是针对鸿蒙平台的自定义修改版本,需要通过 Git 方式引入依赖。在项目的 pubspec.yaml 文件中添加以下配置:

dependencies:
  wechat_camera_picker:
    git:
      url: https://gitcode.com/openharmony-sig/fluttertpc_flutter_wechat_camera_picker
      path: .
  camera:
    git:
      url: https://gitcode.com/openharmony-sig/flutter_packages.git
      path: packages/camera/camera

鸿蒙权限配置

在鸿蒙平台上使用相机功能需要配置相应的权限。在项目的 module.json5 文件中添加以下权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.CAMERA",
        "reason": "需要访问相机进行拍摄",
        "usedScene": {
          "abilities": ["ability.package.name"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.MICROPHONE",
        "reason": "需要访问麦克风进行视频录制",
        "usedScene": {
          "abilities": ["ability.package.name"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.WRITE_MEDIA",
        "reason": "需要写入媒体文件",
        "usedScene": {
          "abilities": ["ability.package.name"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.READ_MEDIA",
        "reason": "需要读取媒体文件",
        "usedScene": {
          "abilities": ["ability.package.name"],
          "when": "inuse"
        }
      }
    ]
  }
}

导入包

在需要使用相机选择器的 Dart 文件中导入包:

import 'package:wechat_camera_picker/wechat_camera_picker.dart';

使用方法

简单使用

使用 CameraPicker.pickFromCamera() 方法可以快速调用相机选择器:

final AssetEntity? entity = await CameraPicker.pickFromCamera(context);
if (entity != null) {
  // 处理拍摄的照片或视频
  print('拍摄成功:${entity.id}');
}

带配置的使用

使用 CameraPickerConfig 可以自定义相机选择器的行为:

final AssetEntity? entity = await CameraPicker.pickFromCamera(
  context,
  pickerConfig: const CameraPickerConfig(
    enableRecording: true, // 允许录制视频
    maximumRecordingDuration: Duration(seconds: 30), // 最大录制时长
    resolutionPreset: ResolutionPreset.high, // 拍摄分辨率
    preferredLensDirection: CameraLensDirection.back, // 默认使用后置摄像头
    enableTapRecording: true, // 允许点击录制视频
    theme: ThemeData(primarySwatch: Colors.green), // 自定义主题
  ),
);

if (entity != null) {
  // 处理拍摄的照片或视频
  if (entity.type == AssetType.image) {
    print('拍摄照片成功:${entity.id}');
  } else if (entity.type == AssetType.video) {
    print('录制视频成功:${entity.id},时长:${entity.duration}');
  }
}

自定义配置项

CameraPickerConfig 支持以下主要配置项:

参数名 类型 描述 默认值
enableRecording bool 是否允许录制视频 false
onlyEnableRecording bool 是否仅允许录制视频 false
enableTapRecording bool 是否允许点击录制视频 false
enableAudio bool 是否录制音频(仅视频模式) true
maximumRecordingDuration Duration? 最大录制时长 Duration(seconds: 15)
minimumRecordingDuration Duration 最小录制时长 Duration(seconds: 1)
resolutionPreset ResolutionPreset 相机分辨率 ResolutionPreset.max
preferredLensDirection CameraLensDirection 首选相机镜头方向 CameraLensDirection.back
theme ThemeData? 自定义主题 CameraPicker.themeData(wechatThemeColor)

高级功能

自定义文字

如果需要自定义相机界面的文字,可以使用 CameraPickerTextDelegate

class CustomTextDelegate extends CameraPickerTextDelegate {
  
  String get cancelButtonText => '取消';

  
  String get confirmButtonText => '确定';

  
  String get recordingButtonText => '按住拍';

  
  String get shootingButtonText => '拍照';
}

// 使用自定义文字代理
final AssetEntity? entity = await CameraPicker.pickFromCamera(
  context,
  pickerConfig: CameraPickerConfig(
    textDelegate: CustomTextDelegate(),
  ),
);

自定义前景 widget

可以通过 foregroundBuilder 添加自定义的前景 widget:

final AssetEntity? entity = await CameraPicker.pickFromCamera(
  context,
  pickerConfig: CameraPickerConfig(
    foregroundBuilder: (BuildContext context, CameraState state) {
      return Positioned(
        top: 20,
        left: 20,
        child: Container(
          padding: const EdgeInsets.all(8),
          color: Colors.black.withOpacity(0.5),
          child: const Text(
            '自定义前景',
            style: TextStyle(color: Colors.white),
          ),
        ),
      );
    },
  ),
);

注意事项

  1. 确保在鸿蒙项目中正确配置了相机、麦克风和媒体文件的权限
  2. 该插件依赖于鸿蒙适配的 camera 包,需要通过 Git 方式引入
  3. 在使用前,建议检查设备是否支持相机功能
  4. 对于视频录制,建议合理设置最大录制时长,避免占用过多存储空间
  5. 在低性能设备上,建议降低分辨率设置以获得更流畅的体验

总结

Flutter WeChat Camera Picker 是一个功能强大、UI 友好的相机选择器插件,完美适配鸿蒙平台。通过简单的配置,开发者可以快速集成微信风格的相机功能到自己的 Flutter 应用中,支持拍照、录像等多种功能。

该插件的优势在于:

  • 与微信一致的用户体验,降低用户学习成本
  • 丰富的自定义配置,满足不同应用场景需求
  • 良好的性能优化,适配各种设备
  • 完整的文档和示例,便于快速集成

通过本指南,您可以轻松地在鸿蒙平台上集成和使用 Flutter WeChat Camera Picker 插件,为您的应用添加专业的相机功能。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐