- Add VariableSpec class with magnitude field validation - Add Formula class supporting multiple input/output variables - Support d4rt_code as string or object with code field - Add comprehensive tests for parsing and serialization - Fix broken test import in pruebas_d4rt_test.dart Follows README.md format requirements exactly
70 lines
2 KiB
Dart
70 lines
2 KiB
Dart
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!]
|
|
}
|