From 2fe1a4f4b908dca6e9177d87d4b1f5fd378cf03f Mon Sep 17 00:00:00 2001 From: Alex Wallen Date: Fri, 21 Apr 2023 11:35:23 -1000 Subject: [PATCH 1/4] feat: add key event --- lib/flutter_eval.dart | 20 +++++++------ lib/src/widgets.dart | 3 +- lib/src/widgets/focus_manager.dart | 45 ++++++++++++++++++++++++++++++ lib/widgets.dart | 1 + 4 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 lib/src/widgets/focus_manager.dart diff --git a/lib/flutter_eval.dart b/lib/flutter_eval.dart index ff6b535..b06a464 100644 --- a/lib/flutter_eval.dart +++ b/lib/flutter_eval.dart @@ -54,6 +54,7 @@ import 'package:flutter_eval/src/widgets/app.dart'; import 'package:flutter_eval/src/widgets/basic.dart'; import 'package:flutter_eval/src/widgets/container.dart'; import 'package:flutter_eval/src/widgets/editable_text.dart'; +import 'package:flutter_eval/src/widgets/focus_manager.dart'; import 'package:flutter_eval/src/widgets/framework.dart'; import 'package:flutter_eval/src/widgets/icon.dart'; import 'package:flutter_eval/src/widgets/icon_data.dart'; @@ -167,18 +168,19 @@ class FlutterEvalPlugin implements EvalPlugin { registry.defineBridgeClass(cls); } - registry.defineBridgeEnum($MainAxisAlignment.$declaration); - registry.defineBridgeEnum($CrossAxisAlignment.$declaration); - registry.defineBridgeEnum($MainAxisSize.$declaration); - registry.defineBridgeEnum($FontWeight.$declaration); - registry.defineBridgeEnum($FontStyle.$declaration); - registry.defineBridgeEnum($TextDirection.$declaration); - registry.defineBridgeEnum($VerticalDirection.$declaration); - registry.defineBridgeEnum($TextBaseline.$declaration); registry.defineBridgeEnum($Axis.$declaration); registry.defineBridgeEnum($BorderStyle.$declaration); registry.defineBridgeEnum($BoxFit.$declaration); + registry.defineBridgeEnum($CrossAxisAlignment.$declaration); registry.defineBridgeEnum($FilterQuality.$declaration); + registry.defineBridgeEnum($FontStyle.$declaration); + registry.defineBridgeEnum($FontWeight.$declaration); + registry.defineBridgeEnum($KeyEventResult.$declaration); + registry.defineBridgeEnum($MainAxisAlignment.$declaration); + registry.defineBridgeEnum($MainAxisSize.$declaration); + registry.defineBridgeEnum($TextBaseline.$declaration); + registry.defineBridgeEnum($TextDirection.$declaration); + registry.defineBridgeEnum($VerticalDirection.$declaration); registry.addSource(DartSource('dart:ui', dartUiSource)); @@ -313,6 +315,8 @@ class FlutterEvalPlugin implements EvalPlugin { 'package:flutter/src/painting/basic_types.dart', 'VerticalDirection', $VerticalDirection.$values) ..registerBridgeEnumValues('package:flutter/src/painting/basic_types.dart', 'Axis', $Axis.$values) ..registerBridgeEnumValues('package:flutter/src/painting/box_fit.dart', 'BoxFit', $BoxFit.$values) + ..registerBridgeEnumValues( + 'package:flutter/src/widgets/focus_manager.dart', 'KeyEventResult', $KeyEventResult.$values) ..registerBridgeEnumValues('dart:ui', 'FilterQuality', $FilterQuality.$values) ..registerBridgeEnumValues('package:flutter/src/rendering/flex.dart', 'MainAxisSize', $MainAxisSize.$values) ..registerBridgeEnumValues( diff --git a/lib/src/widgets.dart b/lib/src/widgets.dart index 147faa2..e2413d2 100644 --- a/lib/src/widgets.dart +++ b/lib/src/widgets.dart @@ -1,11 +1,12 @@ const widgetsSource = ''' library widgets; - + export 'foundation.dart' show UniqueKey; export 'src/widgets/app.dart'; export 'src/widgets/basic.dart'; export 'src/widgets/container.dart'; export 'src/widgets/editable_text.dart'; +export 'src/widgets/focus_manager.dart'; export 'src/widgets/framework.dart'; export 'src/widgets/icon.dart'; export 'src/widgets/icon_data.dart'; diff --git a/lib/src/widgets/focus_manager.dart b/lib/src/widgets/focus_manager.dart new file mode 100644 index 0000000..297ef70 --- /dev/null +++ b/lib/src/widgets/focus_manager.dart @@ -0,0 +1,45 @@ +import 'package:dart_eval/dart_eval.dart'; +import 'package:dart_eval/dart_eval_bridge.dart'; +import 'package:flutter/widgets.dart'; + +class $KeyEventResult implements $Instance { + static const $type = + BridgeTypeRef(BridgeTypeSpec('package:flutter/src/widgets/focus_manager.dart', 'KeyEventResult')); + + static const $declaration = BridgeEnumDef( + $type, + values: [ + 'handled', + 'ignored', + 'skipRemainingHandlers', + ], + methods: {}, + getters: {}, + setters: {}, + fields: {}, + ); + + static final $values = + KeyEventResult.values.asNameMap().map((key, value) => MapEntry(key, $KeyEventResult.wrap(value))); + + const $KeyEventResult.wrap(this.$value); + + @override + final KeyEventResult $value; + + @override + KeyEventResult get $reified => $value; + + @override + $Value? $getProperty(Runtime runtime, String identifier) { + throw UnimplementedError(); + } + + @override + int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!); + + @override + void $setProperty(Runtime runtime, String identifier, $Value value) { + throw UnimplementedError(); + } +} diff --git a/lib/widgets.dart b/lib/widgets.dart index 57a7a89..d26f6cf 100644 --- a/lib/widgets.dart +++ b/lib/widgets.dart @@ -5,3 +5,4 @@ export 'src/widgets/basic.dart' show $Row, $Column; export 'src/widgets/container.dart' show $Container; export 'src/widgets/framework.dart' hide $StatelessElement; export 'src/widgets/scroll_view.dart' show $ListView; +export 'src/widgets/focus_manager.dart' show $KeyEventResult; From 4f714f30a4aff721e4c565ffa78dc9c0eabddfcf Mon Sep 17 00:00:00 2001 From: "Stephen (Alex) Wallen" Date: Sun, 23 Apr 2023 11:59:14 -1000 Subject: [PATCH 2/4] feat: add RawKeyEvent --- lib/flutter_eval.dart | 2 ++ lib/services.dart | 3 +++ lib/src/services.dart | 3 +++ lib/src/services/raw_keyboard.dart | 43 ++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 lib/services.dart create mode 100644 lib/src/services.dart create mode 100644 lib/src/services/raw_keyboard.dart diff --git a/lib/flutter_eval.dart b/lib/flutter_eval.dart index b06a464..6e12090 100644 --- a/lib/flutter_eval.dart +++ b/lib/flutter_eval.dart @@ -44,6 +44,7 @@ import 'package:flutter_eval/src/rendering.dart'; import 'package:flutter_eval/src/rendering/box.dart'; import 'package:flutter_eval/src/rendering/flex.dart'; import 'package:flutter_eval/src/rendering/object.dart'; +import 'package:flutter_eval/src/services/raw_keyboard.dart'; import 'package:flutter_eval/src/sky_engine/ui/geometry.dart'; import 'package:flutter_eval/src/sky_engine/ui/image.dart'; import 'package:flutter_eval/src/sky_engine/ui/painting.dart'; @@ -162,6 +163,7 @@ class FlutterEvalPlugin implements EvalPlugin { $NetworkImage.$declaration, $MemoryImage.$declaration, $ResizeImage.$declaration, + $RawKeyEvent.$declaration, ]; for (final cls in classes) { diff --git a/lib/services.dart b/lib/services.dart new file mode 100644 index 0000000..05f4920 --- /dev/null +++ b/lib/services.dart @@ -0,0 +1,3 @@ +library flutter_eval.services; + +export 'src/services/raw_keyboard.dart' show $RawKeyEvent; diff --git a/lib/src/services.dart b/lib/src/services.dart new file mode 100644 index 0000000..5e4dcf4 --- /dev/null +++ b/lib/src/services.dart @@ -0,0 +1,3 @@ +const servicesSource = ''' +export 'src/services/raw_keyboard.dart'; +'''; diff --git a/lib/src/services/raw_keyboard.dart b/lib/src/services/raw_keyboard.dart new file mode 100644 index 0000000..04feaf1 --- /dev/null +++ b/lib/src/services/raw_keyboard.dart @@ -0,0 +1,43 @@ +import 'package:dart_eval/dart_eval.dart'; +import 'package:dart_eval/dart_eval_bridge.dart'; +import 'package:flutter/services.dart'; + +class $RawKeyEvent implements $Instance { + $RawKeyEvent.wrap(this.$value); + + static const $type = BridgeTypeRef(BridgeTypeSpec('package:flutter/src/services/raw_keyboard.dart', 'RawKeyEvent')); + + static const $declaration = BridgeClassDef( + BridgeClassType( + $type, + isAbstract: true, + ), + constructors: {}, + fields: {}, + getters: {}, + methods: {}, + setters: {}, + wrap: true, + ); + + @override + final RawKeyEvent $value; + + @override + RawKeyEvent get $reified => $value; + + @override + $Value? $getProperty(Runtime runtime, String identifier) { + throw UnimplementedError(); + } + + @override + int $getRuntimeType(Runtime runtime) { + throw UnimplementedError(); + } + + @override + void $setProperty(Runtime runtime, String identifier, $Value value) { + throw UnimplementedError(); + } +} From 5cc2fffe87e13a67397ce799839054d0584abcc7 Mon Sep 17 00:00:00 2001 From: "Stephen (Alex) Wallen" Date: Mon, 24 Apr 2023 15:37:35 -1000 Subject: [PATCH 3/4] feat: add color --- lib/ui.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/ui.dart b/lib/ui.dart index c617c49..2fa44fa 100644 --- a/lib/ui.dart +++ b/lib/ui.dart @@ -1,3 +1,4 @@ library flutter_eval.ui; export 'src/sky_engine/ui/geometry.dart' show $Size; +export 'src/sky_engine/ui/painting.dart' show $Color; From a26c54b576312a820419776e2291d5275c335400 Mon Sep 17 00:00:00 2001 From: "Stephen (Alex) Wallen" Date: Fri, 5 May 2023 11:21:49 -1000 Subject: [PATCH 4/4] chore: wip --- lib/flutter_eval.dart | 17 ++ lib/src/foundation/change_notifier.dart | 100 +++++++++++ lib/src/material/icons.dart | 2 +- lib/src/rendering.dart | 1 + lib/src/rendering/custom_paint.dart | 216 ++++++++++++++++++++++++ lib/src/sky_engine/ui/painting.dart | 181 ++++++++++++++++++++ lib/src/widgets/basic.dart | 36 ++++ lib/src/widgets/editable_text.dart | 8 +- pubspec.yaml | 8 +- 9 files changed, 564 insertions(+), 5 deletions(-) create mode 100644 lib/src/rendering/custom_paint.dart diff --git a/lib/flutter_eval.dart b/lib/flutter_eval.dart index 6e12090..2bc4a94 100644 --- a/lib/flutter_eval.dart +++ b/lib/flutter_eval.dart @@ -42,6 +42,7 @@ import 'package:flutter_eval/src/painting/image_provider.dart'; import 'package:flutter_eval/src/painting/text_style.dart'; import 'package:flutter_eval/src/rendering.dart'; import 'package:flutter_eval/src/rendering/box.dart'; +import 'package:flutter_eval/src/rendering/custom_paint.dart'; import 'package:flutter_eval/src/rendering/flex.dart'; import 'package:flutter_eval/src/rendering/object.dart'; import 'package:flutter_eval/src/services/raw_keyboard.dart'; @@ -93,6 +94,12 @@ class FlutterEvalPlugin implements EvalPlugin { $StatelessWidget$bridge.$declaration, $StatefulWidget$bridge.$declaration, $ChangeNotifier$bridge.$declaration, + $CustomPaint$bridge.$declaration, + $ValueNotifier.$declaration, + $Canvas.$declaration, + $CustomPainter$bridge.$declaration, + $Paint.$declaration, + $Path.$declaration, $State$bridge.$declaration, $BuildContext.$declaration, $Text.$declaration, @@ -209,16 +216,26 @@ class FlutterEvalPlugin implements EvalPlugin { void configureForRuntime(Runtime runtime) { runtime ..registerBridgeFunc('dart:ui', 'Color.', $Color.$new) + ..registerBridgeFunc('dart:ui', 'Paint.', $Paint.$new) + ..registerBridgeFunc('dart:ui', 'Path.', $Path.$new) ..registerBridgeFunc('dart:ui', 'Size.', $Size.$new) ..registerBridgeFunc( 'package:flutter/src/foundation/change_notifier.dart', 'ChangeNotifier.', $ChangeNotifier$bridge.$new, isBridge: true) + ..registerBridgeFunc( + 'package:flutter/src/foundation/change_notifier.dart', 'ValueNotifier.', $ValueNotifier.$new, + isBridge: true) ..registerBridgeFunc( 'package:flutter/src/widgets/framework.dart', 'StatelessWidget.', $StatelessWidget$bridge.$new, isBridge: true) + ..registerBridgeFunc('package:flutter/src/widgets/rendering.dart', 'CustomPainter.', $CustomPainter$bridge.$new, + isBridge: true) + ..registerBridgeFunc('package:flutter/src/widgets/basic.dart', 'CustomPaint.', $CustomPaint$bridge.$new, + isBridge: true) ..registerBridgeFunc('package:flutter/src/widgets/framework.dart', 'StatefulWidget.', $StatefulWidget$bridge.$new, isBridge: true) ..registerBridgeFunc('package:flutter/src/widgets/framework.dart', 'State.', $State$bridge.$new, isBridge: true) + ..registerBridgeFunc('package:flutter/src/widgets/painting.dart', 'Canvas.', $Canvas.$new, isBridge: true) ..registerBridgeFunc('package:flutter/src/painting/alignment.dart', 'Alignment.', $Alignment.$new) ..registerBridgeFunc('package:flutter/src/painting/alignment.dart', 'Alignment.topLeft*g', $Alignment.$topLeft) ..registerBridgeFunc( diff --git a/lib/src/foundation/change_notifier.dart b/lib/src/foundation/change_notifier.dart index 2fd00d4..4456fb0 100644 --- a/lib/src/foundation/change_notifier.dart +++ b/lib/src/foundation/change_notifier.dart @@ -162,3 +162,103 @@ class $ChangeNotifier$bridge extends ChangeNotifier with $Bridge $_invoke('removeListener', [_$listenerNativeCache[listener]!]); } } + +class $ValueNotifier implements $Instance { + static const $type = BridgeTypeRef( + BridgeTypeSpec('package:flutter/src/foundation/change_notifier.dart', 'ValueNotifier'), + ); + + static const $declaration = BridgeClassDef( + BridgeClassType( + $type, + generics: { + 'T': BridgeGenericParam(), + }, + isAbstract: false, + ), + constructors: { + '': BridgeConstructorDef( + BridgeFunctionDef(returns: BridgeTypeAnnotation($type), params: [ + BridgeParameter('_value', BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.dynamicType)), false), + ]), + ), + }, + methods: { + 'toString': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.stringType), + ), + ), + ), + }, + getters: { + 'value': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.ref('T'), + ), + ), + ), + }, + setters: { + 'value': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.voidType), + ), + params: [ + BridgeParameter( + 'newValue', + BridgeTypeAnnotation( + BridgeTypeRef.ref( + 'T', + ), + ), + false, + ), + ], + ), + ), + }, + fields: { + '_value': BridgeFieldDef( + BridgeTypeAnnotation( + BridgeTypeRef.ref('T'), + ), + ), + }, + wrap: true, + ); + + @override + $Value? $getProperty(Runtime runtime, String identifier) { + switch (identifier) { + case 'value': + return $Function((runtime, target, args) { + return (target!.$value as ValueNotifier).value; + }); + } + throw StateError(''); + } + + @override + int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!); + + @override + get $reified => $value; + + @override + void $setProperty(Runtime runtime, String identifier, $Value value) { + throw UnimplementedError(); + } + + @override + final ValueNotifier $value; + + $ValueNotifier.wrap(this.$value); + + static $Value $new(Runtime runtime, $Value? target, List<$Value?> args) { + return $ValueNotifier.wrap(ValueNotifier(args[0]!.$value)); + } +} diff --git a/lib/src/material/icons.dart b/lib/src/material/icons.dart index 0f69926..7685856 100644 --- a/lib/src/material/icons.dart +++ b/lib/src/material/icons.dart @@ -956,7 +956,7 @@ class Icons { static const IconData home = IconData(0xe318, fontFamily: 'MaterialIcons'); static const IconData home_filled = IconData(0xe319, fontFamily: 'MaterialIcons'); - static const IconData home_max = IconData(0xe31a, fontFamily: 'MaterialIcons'); + static const IconData home_max = IconData(0xe31a, fontFamily: 'MaterialIcons'); static const IconData home_mini = IconData(0xe31b, fontFamily: 'MaterialIcons'); static const IconData home_repair_service = IconData(0xe31c, fontFamily: 'MaterialIcons'); static const IconData home_work = IconData(0xe31d, fontFamily: 'MaterialIcons'); diff --git a/lib/src/rendering.dart b/lib/src/rendering.dart index 6dcd165..4f3c28a 100644 --- a/lib/src/rendering.dart +++ b/lib/src/rendering.dart @@ -2,4 +2,5 @@ const renderingSource = ''' export 'src/rendering/box.dart'; export 'src/rendering/flex.dart'; export 'src/rendering/object.dart'; +export 'src/rendering/custom_paint.dart'; '''; diff --git a/lib/src/rendering/custom_paint.dart b/lib/src/rendering/custom_paint.dart new file mode 100644 index 0000000..d36cf7a --- /dev/null +++ b/lib/src/rendering/custom_paint.dart @@ -0,0 +1,216 @@ +import 'package:dart_eval/dart_eval.dart'; +import 'package:dart_eval/dart_eval_bridge.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; + +class $CustomPainter implements $Instance { + static const $type = BridgeTypeRef( + BridgeTypeSpec( + 'package:flutter/src/rendering/custom_paint.dart', + 'CustomPainter', + ), + ); + + static const $declaration = BridgeClassDef( + BridgeClassType( + $type, + isAbstract: true, + ), + constructors: {}, + fields: {}, + getters: {}, + methods: {}, + setters: {}, + wrap: true, + ); + + @override + $Value? $getProperty(Runtime runtime, String identifier) => throw UnimplementedError(); + + @override + int $getRuntimeType(Runtime runtime) => throw UnimplementedError(); + + @override + get $reified => $value; + + @override + void $setProperty(Runtime runtime, String identifier, $Value value) => throw UnimplementedError(); + + @override + final CustomPaint $value; + + $CustomPainter.wrap(this.$value); +} + +class $CustomPainter$bridge extends CustomPainter with $Bridge { + static const $type = BridgeTypeRef( + BridgeTypeSpec( + 'package:flutter/src/rendering/custom_paint.dart', + 'CustomPainter', + ), + ); + + static const $declaration = BridgeClassDef( + BridgeClassType( + $type, + isAbstract: true, + ), + constructors: { + '': BridgeConstructorDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + $type, + ), + namedParams: [ + BridgeParameter( + 'repaint', + BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.dynamicType), + ), + true), + ]), + ) + }, + fields: {}, + getters: { + 'semanticsBuilder': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.dynamicType), + ), + ), + ), + }, + methods: { + 'addListener': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.voidType), + ), + params: [ + BridgeParameter( + 'listener', + BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.functionType), + ), + false, + ), + ], + ), + ), + 'removeListener': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.voidType), + ), + params: [ + BridgeParameter( + 'listener', + BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.functionType), + ), + false, + ), + ], + ), + ), + 'paint': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.voidType), + ), + params: [ + BridgeParameter( + 'canvas', + BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.dynamicType), + ), + false, + ), + BridgeParameter( + 'size', + BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.dynamicType), + ), + false, + ), + ], + ), + ), + 'shouldRebuildSemantics': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.boolType), + ), + params: [ + BridgeParameter( + 'oldDelegate', + BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.dynamicType), + ), + false, + ), + ], + ), + ), + 'shouldRepaint': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.boolType), + ), + params: [ + BridgeParameter( + 'oldDelegate', + BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.dynamicType), + ), + false, + ), + ], + ), + ), + 'hitTest': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.boolType), + nullable: true, + ), + params: [ + BridgeParameter( + 'position', + BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.dynamicType), + ), + false, + ), + ], + ), + ), + 'toString': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.stringType), + ), + ), + ), + }, + setters: {}, + bridge: true, + ); + + static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) { + return $CustomPainter$bridge(); + } + + @override + $Value? $bridgeGet(String identifier) => throw UnimplementedError(); + + @override + void $bridgeSet(String identifier, $Value value) => throw UnimplementedError(); + + @override + void paint(Canvas canvas, Size size) => throw UnimplementedError(); + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => throw UnimplementedError(); +} diff --git a/lib/src/sky_engine/ui/painting.dart b/lib/src/sky_engine/ui/painting.dart index ed3d2c3..c03077a 100644 --- a/lib/src/sky_engine/ui/painting.dart +++ b/lib/src/sky_engine/ui/painting.dart @@ -90,3 +90,184 @@ class $Color implements Color, $Instance { @override Color withRed(int r) => $value.withRed(r); } + +class $Canvas implements $Instance { + static const $type = BridgeTypeRef( + BridgeTypeSpec( + 'dart:ui', + 'Canvas', + ), + ); + + static const $declaration = BridgeClassDef( + BridgeClassType($type), + constructors: { + '': BridgeConstructorDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation($type), + params: [ + BridgeParameter('recorder', BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.objectType)), false), + BridgeParameter('cullRect', BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.objectType)), false), + ], + ), + ) + }, + methods: { + 'drawPath': BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.voidType)), + params: [ + BridgeParameter('path', BridgeTypeAnnotation($Path.$type), false), + BridgeParameter('paint', BridgeTypeAnnotation($Paint.$type), false), + ], + ), + ), + }, + getters: {}, + setters: {}, + fields: {}, + wrap: true, + ); + + static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) { + return $Canvas.wrap(Canvas( + args[0]!.$value, + args[1]!.$value, + )); + } + + @override + $Value? $getProperty(Runtime runtime, String identifier) { + // TODO: implement $getProperty + throw UnimplementedError(); + } + + @override + int $getRuntimeType(Runtime runtime) { + // TODO: implement $getRuntimeType + throw UnimplementedError(); + } + + @override + // TODO: implement $reified + get $reified => throw UnimplementedError(); + + @override + void $setProperty(Runtime runtime, String identifier, $Value value) { + // TODO: implement $setProperty + } + + @override + final Canvas $value; + + $Canvas.wrap(this.$value); +} + +class $Path implements $Instance { + static const $type = BridgeTypeRef( + BridgeTypeSpec( + 'dart:ui', + 'Path', + ), + ); + + static const $declaration = BridgeClassDef( + BridgeClassType($type), + constructors: { + '': BridgeConstructorDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation($type), + ), + ) + }, + fields: {}, + getters: {}, + methods: {}, + setters: {}, + wrap: true, + ); + + @override + $Value? $getProperty(Runtime runtime, String identifier) { + // TODO: implement $getProperty + throw UnimplementedError(); + } + + @override + int $getRuntimeType(Runtime runtime) { + // TODO: implement $getRuntimeType + throw UnimplementedError(); + } + + static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) { + return $Path.wrap(Path()); + } + + @override + get $reified => $value; + + @override + void $setProperty(Runtime runtime, String identifier, $Value value) { + // TODO: implement $setProperty + } + + @override + final Path $value; + + $Path.wrap(this.$value); +} + +class $Paint implements $Instance { + static const $type = BridgeTypeRef( + BridgeTypeSpec( + 'dart:ui', + 'Paint', + ), + ); + + static const $declaration = BridgeClassDef( + BridgeClassType($type), + constructors: { + '': BridgeConstructorDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation($type), + ), + ) + }, + fields: {}, + getters: {}, + methods: {}, + setters: {}, + wrap: true, + ); + + static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) { + return $Paint.wrap(Paint()); + } + + @override + final Paint $value; + + $Paint.wrap(this.$value); + + @override + $Value? $getProperty(Runtime runtime, String identifier) { + // TODO: implement $getProperty + throw UnimplementedError(); + } + + @override + int $getRuntimeType(Runtime runtime) { + // TODO: implement $getRuntimeType + throw UnimplementedError(); + } + + @override + // TODO: implement $reified + get $reified => throw UnimplementedError(); + + @override + void $setProperty(Runtime runtime, String identifier, $Value value) { + // TODO: implement $setProperty + } +} diff --git a/lib/src/widgets/basic.dart b/lib/src/widgets/basic.dart index 492b055..07707a4 100644 --- a/lib/src/widgets/basic.dart +++ b/lib/src/widgets/basic.dart @@ -6,6 +6,8 @@ import 'package:flutter_eval/src/painting/basic_types.dart'; import 'package:flutter_eval/src/painting/edge_insets.dart'; import 'package:flutter_eval/src/rendering/flex.dart'; import 'package:flutter_eval/src/sky_engine/ui/text.dart'; +import 'package:flutter_eval/src/sky_engine/ui/geometry.dart'; +import 'package:flutter_eval/src/rendering/custom_paint.dart'; import 'package:flutter_eval/src/widgets/framework.dart'; const widgetsBasicSource = ''' @@ -281,3 +283,37 @@ class $Builder implements $Instance { throw UnimplementedError(); } } + +class $CustomPaint$bridge extends CustomPaint with $Bridge { + static const $type = BridgeTypeRef(BridgeTypeSpec('package:flutter/src/widgets/basic.dart', 'CustomPaint')); + + static const $declaration = BridgeClassDef( + BridgeClassType($type, isAbstract: false, $extends: $Widget.$type), + constructors: { + '': BridgeConstructorDef(BridgeFunctionDef(returns: BridgeTypeAnnotation($type), namedParams: [ + BridgeParameter('key', BridgeTypeAnnotation($Key.$type, nullable: true), true), + BridgeParameter('painter', BridgeTypeAnnotation($CustomPainter.$type), true), + BridgeParameter('foregroundPainter', BridgeTypeAnnotation($CustomPainter.$type), true), + BridgeParameter('size', BridgeTypeAnnotation($Size.$type), true), + BridgeParameter('isComplex', BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.boolType)), true), + BridgeParameter('willChange', BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.boolType)), true), + BridgeParameter('child', BridgeTypeAnnotation($Widget.$type), true), + ])) + }, + methods: {}, + getters: {}, + setters: {}, + fields: {}, + wrap: true, + ); + + static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) { + return $CustomPaint$bridge(); + } + + @override + $Value? $bridgeGet(String identifier) => throw UnimplementedError(); + + @override + void $bridgeSet(String identifier, $Value value) => throw UnimplementedError(); +} diff --git a/lib/src/widgets/editable_text.dart b/lib/src/widgets/editable_text.dart index af8d87b..382728c 100644 --- a/lib/src/widgets/editable_text.dart +++ b/lib/src/widgets/editable_text.dart @@ -17,7 +17,13 @@ class $TextEditingController implements $Instance { }, methods: { 'clear': - BridgeMethodDef(BridgeFunctionDef(returns: BridgeTypeAnnotation(BridgeTypeRef.type(RuntimeTypes.voidType)))) + BridgeMethodDef( + BridgeFunctionDef( + returns: BridgeTypeAnnotation( + BridgeTypeRef.type(RuntimeTypes.voidType), + ), + ), + ) }, getters: {}, setters: {}, diff --git a/pubspec.yaml b/pubspec.yaml index 46dcd84..7caba41 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,6 +2,7 @@ name: flutter_eval description: Flutter bridge library for dart_eval, enabling creation of fully dynamic Flutter apps and widgets that can be loaded from a file or the Internet at runtime. version: 0.6.0 homepage: https://github.com/ethanblake4/flutter_eval +publish_to: "none" platforms: android: @@ -12,13 +13,14 @@ platforms: windows: environment: - sdk: '>=2.15.0 <3.0.0' + sdk: ">=2.15.0 <3.0.0" flutter: ">=3.0.0 <3.7.0" dependencies: flutter: sdk: flutter - dart_eval: ^0.6.0 + dart_eval: + path: ../dart_eval path_provider: ^2.0.11 http: ^0.13.5 @@ -27,5 +29,5 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 - + flutter: