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

你用真机试试看。

0
3
慕设计7678942
回复
CrazyCodeBoy
谢谢老师
2021-07-20
共3条回复

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程