コードに"assets/placeholder.png"
として追加したプレースホルダー画像ファイルを使用したいのですが、File not foundエラーが発生します。これは私がdartlangのドキュメントからそれをやっている方法です...
var bytes = await new File('assets/placeholder.png').readAsBytes();
String base64 = CryptoUtils.bytesToBase64(bytes);
bytes
変数は毎回エラーになります。ローカルに保存された画像ファイルのバイトをどのように保存できますか?
Flutter環境では、アセットにアクセスする場合はAssetBundle
を使用する必要があります( https://flutter.io/assets-and-images/ )。
import 'package:flutter/services.Dart' show rootBundle;
ByteData bytes = await rootBundle.load('assets/placeholder.png');
Dartでは、Uint8Listはbyte []と同じです。
1つの関数を作成してファイルパスを渡すと、バイトが返されます。
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;
}
次に、関数を呼び出して、ファイルのバイトを取得します。
try{
Uint8List audioByte;
String myPath= 'MyPath/abc.png';
_readFileByte(myPath).then((bytesData) {
audioByte = bytesData;
//do your task here
});
} catch (e) {
// if path invalid or not able to read
print(e);
}
Base64Stringが必要な場合は、以下のコードを使用します。
文字列audioString = base64.encode(audioByte);
base64インポートの場合、「Dart:convert」;
お役に立てれば幸いです。
バイト単位でファイルを読み取る例を次に示します。
import 'Dart:io';
void main(List<String> arguments) {
readFileByteByByte().then((done) {
print('done');
});
print('waiting...');
print('do something else while waiting...');
}
Future<bool> readFileByteByByte() async {
//final fileName = 'C:\\code\\test\\file_test\\bin\\main.Dart'; // use your image file name here
final fileName = Platform.script.toFilePath(); //this will read this text file as an example
final script = File(fileName);
final file = await script.open(mode: FileMode.read);
var byte;
while (byte != -1) {
byte = await file.readByte();
if (byte == ';'.codeUnitAt(0)) { //check if byte is semicolon
print(byte);
}
}
await file.close();
return (true);
}