Невозможно загрузить актив во флаттере - PullRequest
0 голосов
/ 08 января 2020

Я делюсь снимком, который я сделал ранее, с помощью камеры image_picker. Он отлично работает на эмуляторе, но не на моем устройстве:

onPressed: () async {
  ByteData image = await rootBundle.load(team.avatar.path);
  ...
},

Это ошибка с путем:

Невозможно загрузить ресурс: / storage / emulated / 0 / Android / data / drodriguez.apps.Words / files / Pictures / scaled_2eccad3d-382e-462e-b124-b8fa06a2a32b791445736175256137.jpg

Изображение отображается без ошибок, поэтому путь на 100% правильный:

Image.file(
  _orderedTeams[index].avatar,
  fit: BoxFit.cover,
  height: 92.0,
  width: 92.0,
)

Нужно ли добавить что-то еще, возможно, на pubspec.yml?

1 Ответ

1 голос
/ 08 января 2020

Вы не можете использовать rootBundle для доступа к файлам на телефоне. RootBundle (как сказано в его документах ) работает только для файлов, упакованных с приложением, когда оно было построено (возможно, сохранено на ресурсах, объявленных в pubspe c, et c).

Если вы хотите загрузить изображение с телефона, это может помочь.


ОТВЕТ

Эта функция может читать filePath и возвращать Uint8List (a byteArray):

Future<Uint8List> _readFileByte(String filePath) async {
    Uri myUri = Uri.parse(filePath);
    File audioFile = new File.fromUri(myUri);
    Uint8List bytes;
    await audioFile.readAsBytes().then((value) {
    bytes = Uint8List.fromList(value); 
    print('reading of bytes is completed');
  }).catchError((onError) {
      print('Exception Error while reading audio from path:' +
      onError.toString());
  });
  return bytes;
}

И, чтобы получить ByteData просто:

var path = 'Some path to an image';
var byteArray = _readFileByte(path);
ByteData data = ByteData.view(byteArray.buffer);

(Ответ основан на это )

...