Flutter实现相机拍照和相册选择

Flutter实现相机拍照和相册选择

添加image_picker依赖:https://pub.dev/packages/image_picker/install
给权限(安卓)

 // 写入文件权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    // 读取文件权限
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    // 相机权限
    <uses-permission android:name="android.permission.CAMERA" />

Flutter实现相机拍照和相册选择_第1张图片

// ignore_for_file: prefer_const_constructors, unnecessary_this, avoid_print

import 'dart:async';
import 'dart:html';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:dio/dio.dart';

class ImagePickerPage extends StatefulWidget {
  ImagePickerPage({Key? key}) : super(key: key);

  @override
  State<ImagePickerPage> createState() => _ImagePickerPageState();
}

class _ImagePickerPageState extends State<ImagePickerPage> {
  final picker = ImagePicker();
  XFile? _imageFile;
  List<XFile>? _imageFiles;
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("ImagePicker"),
      ),
      body: Center(
        child: Column(
          children: [
            ElevatedButton(onPressed: _takePhoto, child: const Text("拍照")),
            ElevatedButton(onPressed: _openGallery, child: const Text("打开相册")),
            this._imageFile == null
                ? Text("请选择图片")
                : Image.file(File(_imageFile!.path))
          ],
        ),
      ),
    );
  }
 //拍照
  _takePhoto() async {
    XFile? pickedFile = await picker.pickImage(
        source: ImageSource.camera, maxHeight: 600, maxWidth: 600);

    if (pickedFile != null) {
      print(pickedFile.path);
      print(File(pickedFile.path));
      setState(() {
        _imageFile = pickedFile;
      });
    }
  }
    //打开文件夹选单张图片
  _openGallery() async {
    XFile? pickedFile = await picker.pickImage(
        source: ImageSource.gallery, maxHeight: 600, maxWidth: 600);

    if (pickedFile != null) {
      print(pickedFile.path);
      print(File(pickedFile.path));
      setState(() {
        _imageFile = pickedFile;
      });
    }
  }

  // 选多张图片
    _selectMultiImage() async {
    List<XFile>? images = await picker.pickMultiImage();
    if (images != null) {
      setState(() {
        _imageFiles = images;
      });
    }
  }
}

Flutter实现相机拍照和相册选择_第2张图片
Flutter实现相机拍照和相册选择_第3张图片
Flutter实现相机拍照和相册选择_第4张图片
Flutter实现相机拍照和相册选择_第5张图片

Flutter实现相机拍照和相册选择_第6张图片

学习Flutter图片选择器——image_picker插件的使用

你可能感兴趣的:(Flutter,flutter,android,android,studio)