web-dev-qa-db-ja.com

Dart / Flutterでローカル画像ファイルのバイトを読み取る方法は?

コードに"assets/placeholder.png"として追加したプレースホルダー画像ファイルを使用したいのですが、File not foundエラーが発生します。これは私がdartlangのドキュメントからそれをやっている方法です...

var bytes = await new File('assets/placeholder.png').readAsBytes();
String base64 = CryptoUtils.bytesToBase64(bytes);

bytes変数は毎回エラーになります。ローカルに保存された画像ファイルのバイトをどのように保存できますか?

7
Charles Jr

Flutter環境では、アセットにアクセスする場合はAssetBundleを使用する必要があります( https://flutter.io/assets-and-images/ )。

import 'package:flutter/services.Dart' show rootBundle;


ByteData bytes = await rootBundle.load('assets/placeholder.png');
12
Hadrien Lejard

Dartでは、Uint8Listはbyte []と同じです。

  1. 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;
    }
    
  2. 次に、関数を呼び出して、ファイルのバイトを取得します。

    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);
    }
    
  3. Base64Stringが必要な場合は、以下のコードを使用します。

    文字列audioString = base64.encode(audioByte);

base64インポートの場合、「Dart:convert」;

お役に立てれば幸いです。

5
Wajid khan

バイト単位でファイルを読み取る例を次に示します。

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);
}
0
live-love