【问题标题】:Image_picker not giving real path of the image in flutterImage_picker 没有在颤动中给出图像的真实路径
【发布时间】:2020-12-26 00:17:17
【问题描述】:

我想从图库中选择图像,但是当我尝试将其保存在共享首选项中时。我发现 image_picker 提供了临时位置,例如 tmp/image_picker_4415467867A964-791E-4AFA995BA-18295-0003861F9255294A.jpg

这不是图像的真实路径。我应该如何获取图像的原始位置路径以供以后使用?

或者我想将整个图像保存在数据库中.. 怎么办? 现在不推荐使用 pickimage() 了吗?

请帮忙

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
     title: 'Fluter demo',
  debugShowCheckedModeBanner: false,
  theme: ThemeData(
    primarySwatch: Colors.blue,
    visualDensity: VisualDensity.adaptivePlatformDensity,
  ),
  home: MyHomePage(),
);
 }
 }

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  File _image;
  String _imageloc;

  @override
  void initState() {
    super.initState();
    LoadImage();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Picker'),
      ),
      body: Container(
        alignment: Alignment.center,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _imageloc != null
                ? CircleAvatar(
                backgroundImage: FileImage(File(_imageloc)),
                radius: 80,
              )
            : CircleAvatar(
                backgroundImage: _image != null
                    ? FileImage(_image)
                    : NetworkImage(
                        'https://www.publicdomainpictures.net/pictures/320000/velka/background-image.png'),
              ),
        Padding(
          padding: const EdgeInsets.all(8.0),
          child: RaisedButton(
            onPressed: () {
              PickImage();
            },
            child: Text('Pick Image'),
          ),
        ),
        RaisedButton(
          onPressed: () {
            saveImage(_image.path);
          },
          child: Text('saved'),
        ),
      ],
    ),
  ),
);
  }

  void PickImage() async {
    var image = await ImagePicker.pickImage(source: ImageSource.gallery);
print(image.path);
setState(() {
  _image = image;
});
  }

  void saveImage(_imageloc) async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() {
      preferences.setString('imageloc', _imageloc);
    });
  }

  void LoadImage() async {
    SharedPreferences saveimage = await SharedPreferences.getInstance();
    setState(() {
      saveimage.getString('imageloc');
    });
  }
}

【问题讨论】:

  • 您可能应该编写更多代码。比如你在哪里运行代码?到目前为止你尝试过什么等等。带有代码示例-
  • 感谢您的回复..我稍后会发布..我的系统现在无法正常工作
  • 我已经发布了我的代码

标签: flutter dart flutter-dependencies imagepicker


【解决方案1】:

好吧,如果您以后需要该图像,则需要复制它并将其保存在某个地方。实际图像,而不仅仅是路径。如果我在您的应用程序中选择图像,我希望将其保存。当我从图库中删除图片或更换手机时,我不希望它消失。

您拥有的路径足以读取图像并将其保存在您想要的任何位置。很可能是您的后端,因为我想要我的照片,即使是在另一部手机上。

如何做到这一点在很大程度上取决于您的特定后端,但我相信会有一个教程。

【讨论】:

  • 谢谢.. 但是如果我想稍后保存它,同时我想把它展示给用户呢?
  • 显示临时文件还是复制文件?
  • 您可以根据临时文件名将其显示给用户,但一旦他们点击保存,我会将其上传到某个地方。
  • 将图像保存在数据库中(格式?)或将其复制并保存到文件系统中。哪个更好?
  • 这取决于你想用它做什么。如果您想稍后显示它,我想将它保存到由网络服务器提供服务的文件系统可能是有意义的。如果它是敏感信息,也许将其放入安全数据库中会更好。将其复制到本地设备可能不是您的用户对应用程序的期望。
猜你喜欢
  • 2018-12-14
  • 2018-04-10
  • 2023-01-11
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多