Почему приложение флаттера не загружает ранее записанные данные при перезапуске приложения - PullRequest
0 голосов
/ 23 апреля 2020

Я записал файл изображения в каталог документов приложения для флаттера, используя средство выбора изображений, но в нем говорится, что путь равен нулю при повторном запуске (Go до главного экрана и повторном запуске приложения) приложения флаттера. Я не могу найти точную проблему, вызывающую this.

Путь загружается при запуске приложения.

@override
void initState() {
    super.initState();
    getApplicationDocumentsDirectory().then((directory) {
        _localPath = directory.path;

    });
}

Выбор изображения.

_decideImageView() {

        if(FileSystemEntity.typeSync('$_localPath/name.jpg') == FileSystemEntityType.notFound){
        return AssetImage("assets/example.jpeg");
        }else {

        return FileImage(File('$_localPath/name.jpg'));
}

Выбор изображения

_openGallery(BuildContext context) async{

  var picture = await ImagePicker.pickImage(source: ImageSource.gallery);

  this.setState((){
    imageFile = picture;
  });

  Directory pathd = await getApplicationDocumentsDirectory();
  String path =pathd.path;
  final File newImage = await imageFile.copy('$_localpath/name.jpg');
  Navigator.of(context).pop();
}

1 Ответ

0 голосов
/ 23 апреля 2020
getApplicationDocumentsDirectory().then((directory) {
       _localPath = directory.path;

   });

Не гарантирует, что _localPath будет загружаться во время вызова _decideImageView (). Добавьте печать, чтобы проверить это:

_decideImageView() {
print(_localPath);
        if(FileSystemEntity.typeSync('$_localPath/name.jpg') == FileSystemEntityType.notFound){
        return AssetImage("assets/example.jpeg");
        }else {

        return FileImage(File('$_localPath/name.jpg'));
}

Эта работа для меня после перезагрузки / перезапуска приложения:

_decideImageView(BuildContext context) async {
  Directory pathd = await getApplicationDocumentsDirectory();

  return Navigator.of(context)
      .push(MaterialPageRoute<void>(builder: (BuildContext context) {
    return Scaffold(
      body: Container(
        color: Colors.transparent,
        alignment: Alignment.center,
        child: InkWell(
          child: PhotoView(
            imageProvider: FileImage(File('${pathd.path}/name.jpg')),
            backgroundDecoration: BoxDecoration(color: Colors.transparent),
            minScale: PhotoViewComputedScale.contained * 0.9,
            maxScale: 4.0,
          ),
          onTap: () => Navigator.of(context).pop(),
        ),
      ),
    );
  }));
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...