Flutter相机功能插件simple_camera的使用

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

Flutter相机功能插件simple_camera的使用

简介

simple_camera 是一个用于在应用中快速简单地使用相机功能的包。

simple camera package

它允许你轻松地在小部件中显示实时相机预览,并访问图像和视频流。此外,还提供了开启或关闭音频、改变分辨率、格式、闪光灯模式、曝光模式和对焦模式的功能。

功能

  • 在小部件中显示实时相机预览。
  • 访问图像和视频流。
  • 开启或关闭音频。
  • 改变图像分辨率。
  • 改变图像格式。
  • 改变闪光灯模式。
  • 改变曝光模式。
  • 改变对焦模式。

安装和使用

添加依赖

首先,在 pubspec.yaml 文件中添加 simple_camera 包:

dependencies:
  simple_camera: ^1.0.3
  ...
平台特定设置
iOS

ios/Runner/Info.plist 文件中添加以下行:

<key>NSCameraUsageDescription</key>
<string>你的使用描述</string>
<key>NSMicrophoneUsageDescription</key>
<string>你的使用描述</string>
Android

android/app/build.gradle 中的最小SDK版本改为21(或更高):

minSdkVersion 21

如果需要录制带音频的视频,请在 AndroidManifest.xml 中添加以下权限:

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

使用指南

要开始使用 simple_camera,只需导入并实例化 SimpleCamera,然后根据示例进行初始化即可。之后,你可以使用 SimpleCameraPreview 或调用 simpleCamera.buildPreview() 创建自己的屏幕。

以下是完整的示例代码:

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

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

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var simpleCamera = SimpleCamera();

  [@override](/user/override)
  void initState() {
    super.initState();
    initSimpleCamera();
  }

  [@override](/user/override)
  void dispose() {
    super.dispose();
    simpleCamera.dispose();
  }

  void initSimpleCamera() async {
    try {
      // 初始化相机,并传递一些选项,如分辨率、图像格式等。
      // 如果不指定任何相机描述,默认从前置摄像头开始。
      // 了解更多,请查看文档。
      await simpleCamera.initializeCamera();
      setState(() {});
    } catch (e) {
      // 重要
      // 这里你需要给设备相机和/或音频访问权限
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: SimpleCameraPreview(
        simpleCamera: simpleCamera,
        isFull: true,
        onPressedGallery: () {},
        onPressedVideoRecording: (xfile) {
          if (kDebugMode) {
            print(xfile?.name);
          }
        },
        onPressedTakePicture: (xfile) {
          if (kDebugMode) {
            print(xfile?.name);
          }
        },
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个使用Flutter相机功能插件simple_camera的示例代码。这个示例展示了如何集成和使用simple_camera插件来捕捉照片。

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

dependencies:
  flutter:
    sdk: flutter
  simple_camera: ^2.4.3  # 请检查最新版本号

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

接下来,是完整的Flutter应用代码示例,展示了如何使用simple_camera插件:

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

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

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

class CameraPage extends StatefulWidget {
  @override
  _CameraPageState createState() => _CameraPageState();
}

class _CameraPageState extends State<CameraPage> {
  late CameraController _controller;
  late Future<void> _initializeControllerFuture;

  @override
  void initState() {
    super.initState();
    _controller = CameraController(
      // 获取后置摄像头
      cameras.first,
      ResolutionPreset.high,
    );

    _initializeControllerFuture = _controller.initialize();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Simple Camera Example'),
      ),
      body: FutureBuilder<void>(
        future: _initializeControllerFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            // 如果摄像头初始化成功
            return CameraPreview(_controller);
          } else if (snapshot.connectionState == ConnectionState.waiting) {
            // 显示加载指示器
            return Center(child: CircularProgressIndicator());
          } else {
            // 如果初始化失败,显示错误
            return Center(
              child: Text(
                'Error initializing camera.',
                style: TextStyle(color: Colors.red),
              ),
            );
          }
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          // 捕捉照片
          final XFile? image = await _controller.captureImage();
          if (image != null) {
            // 显示捕捉到的照片(这里简单地打印文件路径)
            print('Captured image path: ${image.path}');
            // 你可以在这里添加代码将图片保存到设备或显示到屏幕上
          }
        },
        tooltip: 'Capture Image',
        child: Icon(Icons.camera_alt),
      ),
    );
  }
}

在这个示例中:

  1. 依赖添加:在pubspec.yaml中添加simple_camera依赖。
  2. 状态管理:在CameraPage中管理相机的状态,包括初始化、释放资源等。
  3. 相机预览:使用CameraPreview小部件显示相机预览。
  4. 拍照功能:通过_controller.captureImage()方法捕捉照片,并获取捕捉到的图片文件。

请注意,为了运行这个示例,你的设备或模拟器需要支持相机功能,并且你需要有适当的权限来处理相机数据。在实际应用中,你可能还需要处理权限请求和错误处理逻辑。

回到顶部