Reimplementation of hetu-script-autobinding: a build_runner generator that emits Hetu ↔ Dart bindings, targeting hetu_script 0.6. Powers the bindings of sfw (Script Flutter Widget).
import 'package:hetu_script_generator/annotations.dart';
import 'package:hetu_script/hetu_script.dart';
part 'person.g.dart';
@HetuExternalClass()
class Person { ... }dart run build_runner build --delete-conflicting-outputsEmits a PersonClassBinding extends HTExternalClass + htFetch/htAssign extension as a part file.
// lib/bindings/flutter_bindings.dart
import 'package:flutter/material.dart';
import 'package:hetu_script_generator/annotations.dart';
@HetuBindings(
classes: [Text, Column, Container, EdgeInsets, Colors, MainAxisAlignment],
skip: {Container: ['someMember']},
)
const flutterBindings = true;The external_bindings builder emits TWO files next to the config:
flutter_bindings.hetu.g.dart— standalone bindings plus a ready-to-register list:final List<HTExternalClass> generatedExternalClasses = [...]flutter_bindings.ht— the paired Hetuexternal classdeclarations with real parameter signatures (hetu validates call arguments against the declaration), ready to ship as a Flutter asset andimportfrom scripts.
Generated bindings automatically:
- adapt function-typed parameters (
HTFunction→ typed Dart closure, e.g.VoidCallback,ValueChanged<bool>); - coerce
int→doubleparameters (hetu numbers arrive asint); - rebuild
List<T>parameters from script lists (List<Widget>.from(...)); - pick Dart-side default values correctly under hetu's argument normalization;
- skip operators, private members and Flutter diagnostics noise (plus per-class
skip:).
dev_dependencies:
build_runner: ^2.4.0
hetu_script_generator:
git: https://github.com/nikitafedorov008/hetu_script_generatorScope the builder in your build.yaml to the config file:
targets:
$default:
builders:
hetu_script_generator|external_bindings:
generate_for:
- lib/bindings/flutter_bindings.dartStatus: constructors (incl. named), static/instance members, enums, callback adapters, type coercions. See test/ for golden examples and ../sfw for a real consumer with a live-interpreter test suite.