image_picker

使用第三方库 image_picker

添加依赖Flutter:相机拍照/相册

image_picker: ^0.6.2+1

使用:

先贴上完整代码

import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:image_picker/image_picker.dart' as prefix0;

class ImagePicker extends StatefulWidget {
  @override
  _ImagePickerState createState() => _ImagePickerState();
}

File image;

class _ImagePickerState extends State<ImagePicker> {
  @override
  Widget build(BuildContext context) {
    return Material(
      child: Center(
        child:   GestureDetector(
          child: ClipOval(
            child: Container(
              width: 70,
              height: 70,
              child: image != null ? Image.file(
                image,
                fit: BoxFit.cover,
              ):Container()
            ),
          ),
          onTap: () {
            _showDialog(context);
          },
        ),
      ),
    );
  }

  _showDialog(BuildContext context) {
    ///这个是系统的组件,底部弹出框,类似ios的那种效果
    showCupertinoModalPopup(
        context: context,
        builder: (context) {
          var dialog = CupertinoActionSheet(
            title: Text('更改图像'),
            cancelButton: CupertinoActionSheetAction(
                onPressed: () {
                  Navigator.pop(context, 0);
                },
                child: Text('取消')),
            actions: <Widget>[
              CupertinoActionSheetAction(
                onPressed: () {
                  _showImagePicker(ImageSource.camera);
                  Navigator.pop(context, 0);
                },
                child: Text('相机'),
              ),
              CupertinoActionSheetAction(
                onPressed: () {
                  _showImagePicker(ImageSource.gallery);
                  Navigator.pop(context, 0);
                },
                child: Text('相册'),
              ),
            ],
          );
          return dialog;
        });
  }

  ///ImageSource是Image_picker库里面的,不要自己去创建
  _showImagePicker(ImageSource type) async {
    File data = await prefix0.ImagePicker.pickImage(source: type);
    setState(() {
      image = data;
    });
  }

}

返回类型默认是File,使用非常简单,ios使用详情请移步到 https://pub.flutter-io.cn/packages/image_picker

相关文章: