【问题标题】:imagepicker doesn't copy file to other location in flutterimagepicker不会将文件复制到颤振中的其他位置
【发布时间】: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


【解决方案1】:

1.添加最新版本依赖image_picker和路径提供者

2.在清单文件中授予以下权限

使用权限 android:name="android.permission.READ_EXTERNAL_STORAGE"

使用权限 android:name="android.permission.WRITE_EXTERNAL_STORAGE"

使用权限 android:name="android.permission.CAMERA"

3.和 pub get

4.再次运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2018-10-14
    • 2018-09-15
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多