Вы можете получить доступ к байтовым данным через rootBundle
. Затем вы можете сохранить его во временную директорию устройства, полученную с помощью path_provider
(вам необходимо добавить его как зависимость).
import 'dart:async';
import 'dart:io';
import 'package:flutter/services.dart' show rootBundle;
import 'package:path_provider/path_provider.dart';
Future<File> getImageFileFromAssets(String path) async {
final byteData = await rootBundle.load('assets/$path');
final file = File('${(await getTemporaryDirectory()).path}/$path');
await file.writeAsBytes(byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes));
return file;
}
В вашем примере вы бы назвали эту функцию следующим образом:
File f = await getImageFileFromAssets('images/myImage.jpg');
Для получения дополнительной информации о записи байтовых данных, проверьте этот ответ .
Вам понадобится await
Future
, и для этого сделайте функцию async
:
RaisedButton(
onPressed: () async => showDialog(
context: context,
builder: (_) => Container(child: Image.file(await getImageFileFromAssets('images/myImage.jpg')))),
child: Text('Show Image'));