flutter-照相机的使用

本文介绍如何在flutter中使用照相机;
1 加入必要的plugin在.yaml文件中:

camera:

2 在main函数中执行获取到可用的camera,并将camera数据传递到指定界面待使用;

import 'package:camera/camera.dart';
List cameras;
Future main() async{
	// 获取到可用的camera
  cameras = await availableCameras();
  return runApp(MyApp());
}

3 在照相机界面中获取到cameras数据,

 List cameras;
  page1(this.cameras);

4 定义并初始化camera的控制器:

//定义照相机控制器
  CameraController controller;
  @override
  void initState() {
    super.initState();
    //实例化照相机控制器对象 明确使用的camera和分辨率
    controller = new CameraController(widget.cameras[0], ResolutionPreset.medium);
    //初始化控制器  当没有安装的时候返回空  否则更新state
    controller.initialize().then((_){
      if(!mounted){
        return;
      }
      setState(() {});
    });

5 创建照相机打开区域:

  @override
  Widget build(BuildContext context) {
    //当controler中没有值的时候
    if(!controller.value.isInitialized){
      return Container();
    }else  //当有值的时候返回对于控制器中的照相机数据
      return AspectRatio(aspectRatio: controller.value.aspectRatio,child: CameraPreview(controller),);
  }

照相机界面的完整代码如下:

class page1 extends StatefulWidget {
  List cameras;
  page1(this.cameras);
  @override
  _page1State createState() => _page1State();
}
class _page1State extends State {
  //定义照相机控制器
  CameraController controller;
  @override
  void initState() {
    super.initState();
    //实例化照相机控制器对象 明确使用的camera和分辨率
    controller = new CameraController(widget.cameras[0], ResolutionPreset.medium);
    //初始化控制器  当没有安装的时候返回空  否则更新state
    controller.initialize().then((_){
      if(!mounted){
        return;
      }
      setState(() {});
    });
  }
  @override
  void dispose() {
    //在dispose的时候取消controller
    controller?.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    //当controler中没有值的时候
    if(!controller.value.isInitialized){
      return Container();
    }else  //当有值的时候
      return AspectRatio(aspectRatio: controller.value.aspectRatio,child: CameraPreview(controller),);
  }
}

你可能感兴趣的:(flutter)