代码拉取完成,页面将自动刷新
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
///本页面主要展示获取图片,从拍照/相册
class ImagePickerPage extends StatefulWidget {
@override
_ImagePickerPageState createState() => _ImagePickerPageState();
}
class _ImagePickerPageState extends State<ImagePickerPage> {
List<File> _images = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('图片选择'),
),
body: Center(
child: Wrap(
spacing: 5,
runSpacing: 5,
children: _genImages(),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _pickImage,
child: Icon(Icons.add_a_photo),
tooltip: '选择图片',
),
);
}
void _pickImage() {
showModalBottomSheet(
context: context,
builder: (context) => Container(
height: 120,
child: Column(
children: [
_buildItem('拍照', true),
_buildItem('相机', false),
],
),
));
}
_buildItem(String title, bool isTakePhoto) {
return GestureDetector(
onTap: () => _getImage(isTakePhoto),
child: ListTile(
leading:
isTakePhoto ? Icon(Icons.camera_alt) : Icon(Icons.photo_library),
title: Text(title),
),
);
}
Future _getImage(bool isTakePhoto) async {
Navigator.pop(context);
var image = await ImagePicker().getImage(
source: isTakePhoto ? ImageSource.camera : ImageSource.gallery,
);
if (image != null) {
setState(() {
_images.add(File(image.path));
});
}
}
_genImages() {
return _images.map((e) => Stack(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(6),
child: Image.file(
e,
width: 120,
height: 90,
fit: BoxFit.fill,
),
)
],
)).toList();
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。