参考
直播开播前的镜头调试,单纯的显示摄像头的内容
添加插件

camera: ^0.9.7+1
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';List<CameraDescription> cameras;Future<void> main() async {WidgetsFlutterBinding.ensureInitialized();cameras = await availableCameras();runApp(CameraApp());}class CameraApp extends StatefulWidget {@override_CameraAppState createState() => _CameraAppState();}class _CameraAppState extends State<CameraApp> {CameraController controller;@overridevoid initState() {super.initState();controller = CameraController(cameras[0], ResolutionPreset.medium);controller.initialize().then((_) {if (!mounted) {return;}setState(() {});});}@overridevoid dispose() {controller?.dispose();super.dispose();}@overrideWidget build(BuildContext context) {if (!controller.value.isInitialized) {return Container();}return AspectRatio(aspectRatio:controller.value.aspectRatio,child: CameraPreview(controller));}}

我自己的代码,直播开播前的镜头调试,单纯的显示摄像头的内容

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:permission_handler/permission_handler.dart';import '../../common/Global.dart';
import '../../common/backgroundWall.dart';
import '../../router.dart';//开播页
class StartCameraSeeding extends StatefulWidget {@overrideStartCameraSeedingState createState() => StartCameraSeedingState();
}class StartCameraSeedingState extends State<StartCameraSeeding> {CameraController? controller;late List<CameraDescription> cameras;//前后摄像头设置int frontCamera = 1;@overrideinitState() {//请求权限if (Platform.isAndroid || Platform.isIOS) {Permission.camera.request().then((value) async {print('权限的值是多少${value}');await Permission.microphone.request().then((value) {} );});}super.initState();//初始化镜头initData().then((value) {});}initData() async {cameras = await availableCameras();controller = CameraController(cameras[frontCamera], ResolutionPreset.medium);if (controller != null) {controller!.initialize().then((_) {if (!mounted) {return;}mySetState(() {});});}}@overridevoid dispose() {if (controller != null) {controller!.dispose();}super.dispose();}mySetState(callBack) {if (mounted) {setState(() {callBack();});}}@overrideWidget build(BuildContext context) {if (controller == null) {return Container();} else if (controller != null) {if (!controller!.value.isInitialized) {return Container();}}return Material(child: Stack(alignment: Alignment.center,children: [//  AspectRatio(//   aspectRatio: Global.screenWidth/Global.screenHeight,//   child: CameraPreview(controller!)),//除以反转,就是正常的比例了,用Transform.scale放大填充满屏Center(child: Transform.scale(scale: (1/controller!.value.aspectRatio)/deviceRatio,child: AspectRatio(aspectRatio: 1/controller!.value.aspectRatio,child: CameraPreview(controller!)),),),Column(children: [addHeadView(),Container(margin: const EdgeInsets.only(left: 20, right: 20, top: 50),decoration: const BoxDecoration(color: Colors.transparent),child: Row(crossAxisAlignment: CrossAxisAlignment.start,children: [BackgroundWall(width: 100,height: 100,hasPlaceholder: true,radius: 4.r,avatarUrl: 'assets/images/bg_none_nearby.png',fit: BoxFit.cover,),Container(margin: const EdgeInsets.only(top: 15),alignment: Alignment.topLeft,child: Column(children: const [Text('请输入直播标题',style: TextStyle(color: Colors.white, fontSize: 15),)],),)],),),Expanded(child: Container()),Row(children: [Expanded(child: GestureDetector(onTap: (){MyRouter.pushMyMap(context, MyRouter.directSeedingAnchor,{"type":1});},child: Container(margin: const EdgeInsets.only(left: 5, right: 5, bottom: 10),padding: const EdgeInsets.only(top: 10, bottom: 10),decoration: BoxDecoration(color: Colors.red, borderRadius: BorderRadius.circular(20)),child: Container(alignment: Alignment.center,child: const Text('开启视频直播',style: TextStyle(color: Colors.white, fontSize: 16),),),),),),GestureDetector(onTap: (){//前后镜头切换if(frontCamera==1){controller = CameraController(cameras[0], ResolutionPreset.medium);if (controller != null) {controller!.initialize().then((_) {if (!mounted) {return;}frontCamera=0;mySetState((){});});}}else{controller = CameraController(cameras[1], ResolutionPreset.medium);if (controller != null) {controller!.initialize().then((_) {if (!mounted) {return;}frontCamera=1;mySetState((){});});}}},child: Container(margin: const EdgeInsets.only(left: 5, right: 10, bottom: 10),padding: const EdgeInsets.only(top: 10, bottom: 10),child: const Image(image: AssetImage('assets/images/bg_none_nearby.png'),width: 35,height: 35,),),)],)],),],),);}Widget addHeadView() {return Container(padding: EdgeInsets.only(top: Global.topHeight + 11.r, bottom: 20.r),child: Row(children: [GestureDetector(onTap: () {Navigator.pop(context);},child: Container(margin: EdgeInsets.only(left: 15.r, right: 12.r),child: const Image(image: AssetImage('assets/images/icon_back@2x.png'),width: 24,height: 24,color: Colors.white,),),),]));}
}

flutter 调用摄像头,前后镜头切换相关推荐

  1. Ionic系列——调用摄像头拍照和选择图库照片功能的实现

    2019独角兽企业重金招聘Python工程师标准>>> 1.需求描述 最近要做一个功能就是调用摄像头拍照,然后上传照片的功能,或者直接打开图库选择照片然后上传. 2.准备 ①.添加插 ...

  2. HTML5+JavaScript调用摄像头拍照或者摄像

    调用摄像头拍照或者摄像有多种方法,之前介绍过两种: HTML5 <input type="file">标签直接调用:https://blog.csdn.net/qq_2 ...

  3. Unity如何调用摄像头并显示在窗口内

    Unity如何调用摄像头并显示在窗口内 序言 目标 unity中的实现 序言 在学习Unity开发AR过程中,发现无论是Vuforia还是Unity中的ARkit或者ARcore,均是建立一个ARca ...

  4. @zxing/library插件在H5页面上调用摄像头进行扫码识别解决方法,以及对华为手机的兼容

    @zxing/library调用摄像头 这是第一次写博客,不太熟悉,如果我的方法有些问题,请多指正,谢谢!! 关于@zxing/library 导入@zxing/library npm i @zxin ...

  5. mui教程2——窗口管理、调用相册、调用摄像头、调用重力感应、微信朋友圈界面(仿制)分析

    一.窗口管理 1,页面初始化 在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,mui将该事件封装成了mui.plusReady()方法,涉及到HTML5 ...

  6. 浏览器调用摄像头getUserMedia

    浏览器调用摄像头getUserMedia 2018年启动QQ浏览器会启动摄像头的新闻闹得沸沸扬扬. 前段时间公司让研究一下这个浏览器启用摄像头的功能,希望能够实现浏览器网页扫描二维码的功能.现在写下来 ...

  7. 解决PC浏览器调用摄像头失败(本地可以,线上失败)

    解决PC浏览器调用摄像头失败(本地可以,线上失败) 原因:浏览器为了安全http协议获取不到摄像头权限 解决方案 1.切换https 如果域名可以使用https,切换为https即可 2.修改浏览器设 ...

  8. java 下拉多级联动 头像裁剪 调用摄像头 SpringMVC mybatis SSM

    获取[下载地址]   QQ 313596790 三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速 ...

  9. h5 利用getUserMedia 实现 只调用摄像头

    h5开发中调用摄像头,通常会根据不同的手机显示不同的状态,往往会可以选择相册中的图片, 常规用法: -input type=file capture 为了让用户必须拍照上传 利用 getUserMed ...

最新文章

  1. python生成50个随机数_Python:如何生成12位随机数?
  2. Windbg 教程-调试非托管程序的基本命令下
  3. python为什么这么火 知乎-没想到 Google 排名第一的编程语言,为什么会这么火?...
  4. WordPress中.user.ini 权限问题
  5. 全球及中国生物柴油行业产量规模及市场消费需求预测报告2021-2027年
  6. Vue的阻止冒泡与阻止默认
  7. 一位经验丰富的程序员如何建立网络初创企业?
  8. Redis:08---字符串对象
  9. C# 数据库连接池 线程安全 单例模式 的实现
  10. android 防止重复启动app,Android应用开发Android 防止启动页面(SplashActivity)被多次启动...
  11. Apache HTTP服务器 2.0版本文档
  12. iOS 力学动画生成器UIKit Dynamics 之碰撞效果解说
  13. flask如何查询mysql_如何从Flask应用中的MySQL查询返回数据?
  14. MapTask工作机制图解
  15. 对象与对象之间的赋值(别名现象)
  16. 微信小程序使用图标库
  17. 计算机八进制 算法视频,八进制算法
  18. springboot程序logback日志基本配置,多个包不同日志级别输入到文件中
  19. 2019级软件工程应用与实践-人工智能快递柜(代码分析7)
  20. 微信订阅号和服务器,微信订阅号与服务号有什么不同?

热门文章

  1. 分布式事务6种解决方案(超详细)
  2. itchat实现命令行聊天+记录聊天图片/表情
  3. Android KEYCODE键值
  4. (转)C#开源资源大汇总之二
  5. Window常用快捷键——Alt组合键
  6. 运动用品品牌排行榜,双十一运动好物选购清单分享
  7. 七夕买什么礼物?音质好的蓝牙耳机推荐
  8. 富华力鼎:短视频拍摄技巧有哪些
  9. 电脑更新能按f8修复计算机,如何让Win7系统开机时按F8出现修复计算机选项
  10. wps文档中添加并排的表格