Как я могу динамически построить Dart script для spawnUri?

Я хочу динамически построить и загрузить Dart script. Как это сделать?

Я знаю, что могу использовать Isolate.spawnUri для динамической загрузки Dart script. Тем не менее, я только знаю, что могу загрузить из файла: и http: URI. Это означает, что мне нужно поставить где-нибудь загруженный script, что является осложнением, которое я бы хотел избежать.

Ответ 1

В Dart SDK 1.10 теперь вы можете создать данные: URI из String и передать эти данные: URI для spawnUri.

Это означает, что вы можете динамически строить строку во время выполнения, кодировать ее и динамически загружать/запускать. Ухоженная!

Вот пример.

Ваш Дарт script:

import 'dart:isolate';

main() {
  var loadMe = '''

main() {
  print('from isolate');
}

''';

  var uri = Uri.parse('data:application/dart;charset=utf-8,${Uri.encodeComponent(loadMe)}');
  print('loading $uri');

  Isolate.spawnUri(uri, null, null);
}

Обратите внимание на данные: URI должен иметь вид:

data:application/dart;charset=utf-8,DATA

где DATA кодируется в процентах от URI.

Кроме того, utf-8 должен быть строчным.