Flutter相机功能插件camera_camera的使用

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

Flutter相机功能插件camera_camera的使用

Camera_Camera 3.0

新特性

  • 添加缩放功能!
  • 添加闪光灯模式
  • 支持Web平台!
  • 添加切换摄像头功能,可以选择你偏好的摄像头侧(前置或后置)
  • 回调函数用于返回照片文件 onFile(File yourFile)
  • 移除使用 Navigator.pop(context, file) 返回文件的方式
  • 重构内部结构

example

安装指南

Android

你需要在 app/build.gradle 中添加以下内容:

minSdkVersion 21

iOS

你需要在 info.plist 中添加以下内容:

<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Can I use the mic please?</string>

Flutter

pubspec.yaml 中添加包:

camera_camera: current_version

使用方法

Camera_Camera 是一个Widget,可以放在任何地方使用。

示例 01

return Scaffold(
  body: CameraCamera(
    onFile: (file) => print(file),
  ),
);

示例 02

return Scaffold(
  body: CameraCamera(
    onFile: (file) => print(file),
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: () {
      Navigator.push(
        context,
        MaterialPageRoute(
          builder: (_) => CameraCamera(
            onFile: (file) {
              photos.add(file);
              // 拍照后关闭相机
              Navigator.pop(context);
              setState(() {});
            },
          ),
        ),
      );
    },
    child: Icon(Icons.camera_alt),
  ),
);

3.0 版本路线图

特性 进度
缩放
闪光灯
选择摄像头侧
Null安全支持
Web支持(测试版)
桌面支持
自定义布局
添加曝光控制
添加简单视频模式
添加图库

贡献

欢迎提交Pull请求。对于重大更改,请先创建一个issue讨论你希望进行的更改。

请确保适当更新测试。

许可证

MIT

示例代码

import 'dart:io';
import 'package:camera_camera/camera_camera.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Camera Camera 3.0',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Camera Camera 3.0'),
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final photos = <File>[];

  void openCamera() {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (_) => CameraCamera(
          onFile: (file) {
            photos.add(file);
            Navigator.pop(context);
            setState(() {});
          },
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    final size = MediaQuery.of(context).size;
    return Scaffold(
      backgroundColor: Colors.black,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: GridView.builder(
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
        itemCount: photos.length,
        itemBuilder: (_, index) => Padding(
          padding: const EdgeInsets.all(8.0),
          child: Container(
            width: size.width,
            child: kIsWeb
                ? Image.network(photos[index].path)
                : Image.file(
                    photos[index],
                    fit: BoxFit.cover,
                  ),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: openCamera,
        child: Icon(Icons.camera_alt),
      ),
    );
  }
}

以上代码展示了如何在Flutter应用中使用 camera_camera 插件来实现拍照功能,并将拍摄的照片显示在一个网格视图中。希望对你有所帮助!


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

1 回复

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


当然,我可以为你提供一个关于如何在Flutter中使用camera插件来实现相机功能的代码案例。首先,你需要确保已经在你的Flutter项目中添加了camera插件。你可以在pubspec.yaml文件中添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  camera: ^0.12.0+4  # 请检查最新版本号并替换

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

接下来,你需要申请相机权限(在Android和iOS上分别进行配置)。

Android配置

android/app/src/main/AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />

iOS配置

ios/Runner/Info.plist中添加以下权限:

<key>NSCameraUsageDescription</key>
<string>需要访问相机</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风</string>

Flutter代码实现

下面是一个简单的Flutter应用示例,展示了如何使用camera插件来访问和显示相机预览:

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

List<CameraDescription> cameras;

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  cameras = await availableCameras();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Camera App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CameraApp(),
    );
  }
}

class CameraApp extends StatefulWidget {
  @override
  _CameraAppState createState() => _CameraAppState();
}

class _CameraAppState extends State<CameraApp> {
  CameraController? controller;

  @override
  void initState() {
    super.initState();
    if (cameras.isEmpty) {
      return;
    }
    controller = new CameraController(cameras[0], ResolutionPreset.medium);
    controller!.initialize().then((_) {
      if (!mounted) {
        return;
      }
      setState(() {});
    });
  }

  @override
  void dispose() {
    controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    if (controller == null || !controller!.value.isInitialized) {
      return Container();
    }
    return Scaffold(
      appBar: AppBar(
        title: Text('Camera'),
      ),
      body: CameraPreview(controller!),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          await controller!.takePicture();
        },
        child: Icon(Icons.camera_alt),
      ),
    );
  }
}

解释

  1. 依赖项:在pubspec.yaml中添加了camera插件。
  2. 权限:在Android和iOS的配置文件中添加了必要的相机权限。
  3. 初始化相机:在main函数中,通过availableCameras()获取可用的相机列表,并初始化CameraController
  4. UI显示:使用CameraPreview小部件显示相机预览,并添加了一个浮动操作按钮来拍照。

这个示例展示了基本的相机预览和拍照功能。你可以根据需要进一步扩展功能,比如处理拍照后的图片、添加滤镜等。确保在实际项目中检查和处理异常,以及请求用户权限。

回到顶部