Я хочу обновить изображение с помощью функции, но оно всегда говорит, что Future <dynamic>не является подтипом типа ImageProvider <dynamic> - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу обновить изображение, используя функцию, но оно всегда говорит, что Future не является подтипом типа ImageProvider.

Функция является следующей функцией, которую она будет вызывать поставщиком изображений в дереве виджетов. Она отлично работает, когда используя ImageFile, который выбирается из провайдера изображений. Но я скопировал этот файл на диск и получил, что он не работает.

 _decideImageView(){
  if(imageFile== null){
    return AssetImage("assets/example.jpeg");
  }else{
  return AssetImage('$_localPath/name.jpg');
}

Рабочий один

_decideImageView(){
  if(imageFile== null){
    return AssetImage("assets/example.jpeg");
  }else{
    return FileImage(imageFile);
  }

}

Выбор изображения с помощью этой функции .

_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('$path/name.jpg');
  Navigator.of(context).pop();
}

Я предоставил каталог приложения для main.dart, используя

static final _localPath = getApplicationDocumentsDirectory();

1 Ответ

0 голосов
/ 18 апреля 2020

Я хотел бы указать на документацию для getApplicationDocumentsDirectory . Если вы проверите его, вы увидите, что он возвращает Future<Directory>. Приложение не может знать, разрешено ли вам будущее во время синхронной работы, поэтому оно выдает ошибку.

Решение для разрешения фьючерсов перед их вызовом использует initState, например:

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

Я рекомендую вам прочитать о программировании Asyn c, поскольку это довольно интересно знать. Я надеюсь, что это поможет вам, и вы сможете развивать свое приложение дальше!

...