d4rt 0.1.4
d4rt: ^0.1.4 copied to clipboard
An interpreter and runtime for the Dart language. It allows you to execute Dart code dynamically in your Dart/Flutter applications
import 'package:d4rt/d4rt.dart';
class User {
String name;
int _age;
User(this.name, this._age);
User.guest()
: name = 'Guest',
_age = 0;
// ignore: unnecessary_getters_setters
int get age => _age;
set age(int v) => _age = v;
static String staticHello() => 'Hello from static!';
Future<String> fetchProfile() async => 'Profile of $name';
String greet({String? prefix}) => '${prefix ?? 'Hi'}, $name!';
}
final userBridge = BridgedClass(
nativeType: User,
name: 'User',
constructors: {
'': (visitor, positionalArgs, namedArgs) => User(
positionalArgs[0] as String,
positionalArgs[1] as int,
),
'guest': (visitor, positionalArgs, namedArgs) => User.guest(),
},
methods: {
'greet': (visitor, target, positionalArgs, namedArgs) =>
(target as User).greet(prefix: namedArgs['prefix'] as String?),
'fetchProfile': (visitor, target, positionalArgs, namedArgs) =>
(target as User).fetchProfile(), // async supported
},
getters: {
'name': (visitor, target) => (target as User).name,
'age': (visitor, target) => (target as User).age,
},
setters: {
'age': (visitor, target, value) => (target as User).age = value as int,
},
staticMethods: {
'staticHello': (visitor, positionalArgs, namedArgs) => User.staticHello(),
},
);
void main() async {
final interpreter = D4rt();
interpreter.registerBridgedClass(
userBridge, 'package:d4rt_example/d4rt_example.dart');
final code = '''
import 'package:d4rt_example/d4rt_example.dart';
main() async {
var u = User('Alice', 30);
u.age = 31;
var greet = u.greet(prefix: 'Hello');
var profile = await u.fetchProfile();
var guest = User.guest();
var staticMsg = User.staticHello();
return [greet, profile, guest.name, staticMsg];
}
''';
final result = await interpreter.execute(source: code);
print(result); // [Hello, Alice!, Profile of Alice, Guest, Hello from static!]
}