How to read bytes of a local image file in Dart/Fl

2020-02-12 12:20发布

问题:

I would like to use a placeholder image file that I've added to my code as "assets/placeholder.png", but I'm getting a File not found error. This is how I'm doing it from the dartlang documentation...

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

The bytes variable errors every time. How can I save the bytes of a locally saved image file?

回答1:

With Flutter environment, you have to use AssetBundle if you want to access to your assets (https://flutter.io/assets-and-images/).

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


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


回答2:

In dart Uint8List is equal to byte[].

  1. Create one function and pass file path, It will return Bytes.

    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. Now call the function in to get bytes of file.

    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. If you want base64String then use below code:

    String audioString = base64.encode(audioByte);

for base64 import 'dart:convert';

I hope it will help!