2

我想从图库中选择图像,但是当我尝试将其保存在共享首选项中时。我发现 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');
    });
  }
}
4

1 回答 1

3

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

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

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

于 2020-09-07T15:02:33.950 回答