【发布时间】:2020-09-25 15:21:57
【问题描述】:
我是 Flutter 的新手。我只想制作一个拍照和展示相机和画廊的应用程序。但是当我使用下面的代码时,它不会将图库文件保存在 app 目录中。
实际上,路径提供程序在哪里存储文件,为什么它不复制? 有没有我缺少的权限..请帮助我
import 'package:flutter/material.dart';
import 'dart:io';
import 'package:image_picker/image_picker.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
File _storedImage;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Imagesave',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Scaffold(
appBar: AppBar(
title: Text('image save'),
),
body: Column(
children: [
_storedImage != null
? Image.file(_storedImage)
: Text('No image selected'),
RaisedButton(
child: Text("hi"),
onPressed: () {
_takePicture();
},
)
],
),
),
);
}
void _takePicture() async {
// 1. Create an ImagePicker instance.
final ImagePicker _picker = ImagePicker();
final PickedFile pickedImage =
await _picker.getImage(source: ImageSource.gallery);
if (pickedImage == null) {
return;
}
File tmpFile = File(pickedImage.path);
Directory directory = await getApplicationDocumentsDirectory();
final String path = directory.path;
final String fileName =
basename(tmpFile.path); // Filename without extension
final String fileExtension = extension(tmpFile.path); // e.g. '.jpg'
File tmpFile2 = await tmpFile.copy('$path/$fileName$fileExtension');
setState(() {
_storedImage = tmpFile2;
});
//setState(() => _storedImage = tmpFile);
}
}
【问题讨论】:
-
你添加存储权限了吗?
-
但是在 imagepicker 的官方页面上不会告诉你
-
是,已添加但未创建文件。实际上,我查看了 Android/data/package name/ 文件夹
-
我使用的是安卓10
标签: file flutter imagepicker