flutter_js icon indicating copy to clipboard operation
flutter_js copied to clipboard

base64 file can't be passed to js?

Open Dolgovec opened this issue 4 years ago • 1 comments

Hi. I'm a little stuck here trying to pass base64Encoded file to my js function. When I try to encode the file on the js side, application just dies, without any errors or something.

The code I'm trying to execute:

void test() async {
    flutterJs = getJavascriptRuntime();
    
      ... // work with file here
      final String base64Data = base64Encode(bytes); // base64 file

      // example base64 variable for tests
      final t2 = 'AAAAFGZ0eXBtcDQxIBMQGG1wNDEDL2VvbWRhdEdQUk8wAgAASEQ2LjAxLjAyLjAxLjAwTEFKNzA2MTQxODYwMDkzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4kzBtrfZu9oHyzTA8xxcdkMzMjIxMzI0NjI5NzMxAEhFUk82IEJsYWNrAAAAAAAAAAAAAAAAAAAAAAAAAAwFAMKAWAAA4kzBtrfZu9oHyzTA8xxcdkMQ4AcYCAQAAACnsAAAAAAAARIAxxUrNDkuNDIwNyswMzIuMDIwNy8AAAAASEQ2LjAxLjAyLjAxLjAwTEFKNzA2MTQxODYwMDkzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4kzBtrfZu9oHyzTA8xxcdkMzMjIxMzI0NjI5NzMxAEhFUk82IEJsYWNrAAAAAAAAAAAAAAAAAAAAAAAAAOJMwba32bvaB8s0wPMcXHYAAAAAAAAAAAAAAAAAAAAADABVWQAAAABOWUFVVE8AAAAASElHSAAARkxBVAAAAAAAAAAAAAAAAJABAABkAAAALTAuNQAANVNFQwAAAABXWU5OTk5SQVcAAAAAAEFVVE8AAAAAQVNLAAAAAAAAAAAAAAAAAAAAAAABAAAAkF8BAFADAADgAQAAAAAAAFADAADgAQAAAQAAAIC7AABkAAAAGAAAAAIAAACAuwAASPOFVsgxAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR1ADAQAApMgAAA4QAAAOEAAAAC0nTUAe9gah7YC3AQEBQAAAAwBAAAAMuZAAU+wACGRn3uDMgAKfYABDIz73AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCjuPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCRAAAKS+JYiEAE3/Au4ABupK//84ucW';


      final String bundleJs = await rootBundle.loadString('assets/dist/main.js'); // my bundle with code
      flutterJs.evaluate('''var window = global = globalThis;''');
      flutterJs.evaluate(bundleJs + '');
      final r = flutterJs.evaluate('''
        let a = global.goproConvert;
        a.extractFile(\'${base64Data}\' );
      ''');
      print(r);
    }
  }

The JS code:

import * as gpmfExtract from 'gpmf-extract';
import * as base64 from 'base-64';


class goproConvert {
    constructor() {
    }

    async extractFile(base64File)  {
        let file = base64.decode(base64File); // die at this line
        let extracted = await gpmfExtract(file);
        console.log(extracted);
        return base64File;
    }
}

window.goproConvert = new goproConvert();

Maybe I miss something, but haven't found any examples or docs why does it happen. Any help is much appreciated!
Thanks!

Dolgovec avatar Aug 27 '21 13:08 Dolgovec

Maybe related to my question: how to handle js import?

https://github.com/abner/flutter_js/issues/113

mw66 avatar Feb 02 '23 10:02 mw66