Flutter项目Android Studio安卓模拟器无法拍照
来源:6-15 拍照APP开发-拍照配置与AndroidX兼容处理【实战尝鲜】
慕设计7678942
2021-07-16
问题:安卓虚拟机手动打开相机可以使用,但是使用app调用无效果,相册可使用.
需求:能够使用app打开相机,并拍照
老师代码是两年前,方法已过期;
参考过官方ImagePicker给的例子,是ImagePicker和vidPicker混合在一起写的,太复杂,看不懂;
尝试学习网上最新例子的代码,相册可以使用,相机无法调用,完整代码如下:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
///这是一个拍照app的实例
class PhotoApp extends StatefulWidget {
@override
_PhotoAppState createState() => _PhotoAppState();
}
class _PhotoAppState extends State<PhotoApp> {
File? _image;
//用于从camera获取照片的方法
_imageFromCamera() async{
//图片质量设置很重要,否则会导致图片size过大,导致请求超时
PickedFile? image =
await ImagePicker().getImage(source: ImageSource.camera,
imageQuality: 50,
maxWidth: 50,
maxHeight: 50,);
if(image != null){
setState(() {
_image = File(image.path);
});
}
}
//用于从相册中取得图片的方法
_imageFromGallery() async{
PickedFile? image =
await ImagePicker().getImage(source: ImageSource.gallery,
imageQuality: 50,
maxWidth: 50,
maxHeight: 50,);
if(image !=null){
setState(() {
_image = File(image.path);
});
}
}
//用于让用户选择拍照,还是看相册的图片
void _showPicker(var content){
//showModalBottomSheet 是Flutter中全局封装的一个快捷打开底部弹框的方法,
//通过 builder 构建弹框中的内容
showModalBottomSheet(context: context,
builder: (BuildContext bc){
return SafeArea(
child: Wrap(
children: [
//相册
ListTile(
leading: Icon(Icons.photo_album),
title: Text("相册"),
onTap: (){
_imageFromGallery();
Navigator.of(context).pop();
},
),
//相机
ListTile(
leading: Icon(Icons.camera_alt),
title: Text("相机"),
onTap: (){
_imageFromCamera();
Navigator.of(context).pop();
},
),
],
));
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.yellow
),
home: Scaffold(
appBar: AppBar(
title: Text("Photo App展示"),
leading: GestureDetector(
onTap: (){
Navigator.pop(context);
},
child: Icon(Icons.arrow_back),
),
),
//在body中展示相机,相册的代码
body:Column(
children: [
//将内容(黑色的Container)居中
Center(
child: GestureDetector(
onTap: (){
_showPicker(context);
},
child: Container(
color: Colors.black,
width: 200,
height: 50,
child: Text("选择图片",
style: TextStyle(
color: Colors.white,
fontSize:30
),
//白色的字体居中
textAlign: TextAlign.center,
),
),
),
),
Container(
width: 300,
height: 300,
//color: Colors.green,
child: _image != null ? Image.file(_image!,
fit: BoxFit.fill,):Icon(Icons.camera_alt_outlined),
),
],
),
),
);
}
}
写回答
1回答
-
CrazyCodeBoy
2021-07-18
你用真机试试看。
032021-07-20
相似问题