pocketpy.dart 889 B

1234567891011121314151617181920212223242526272829
  1. import 'dart:ffi';
  2. import 'dart:io';
  3. import 'package:ffi/ffi.dart';
  4. import 'pocketpy_bindings_generated.dart';
  5. const String _libName = 'pocketpy';
  6. void flutterPrint(Pointer<Char> text) {
  7. // ignore: avoid_print
  8. print(text.cast<Utf8>().toDartString());
  9. }
  10. final PocketpyBindings pocket = () {
  11. DynamicLibrary dylib;
  12. if (Platform.isMacOS || Platform.isIOS) {
  13. dylib = DynamicLibrary.open('$_libName.framework/$_libName');
  14. } else if (Platform.isAndroid || Platform.isLinux) {
  15. dylib = DynamicLibrary.open('lib$_libName.so');
  16. } else if (Platform.isWindows) {
  17. dylib = DynamicLibrary.open('$_libName.dll');
  18. } else {
  19. throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}');
  20. }
  21. PocketpyBindings retval = PocketpyBindings(dylib);
  22. retval.py_initialize();
  23. retval.py_callbacks().ref.print = Pointer.fromFunction(flutterPrint);
  24. return retval;
  25. }();