Skip to content

Commit 5537d25

Browse files
authored
Merge pull request #134 from Zverik/text_span
Add Locale, TextSpan, and Text.rich()
2 parents e1c86b6 + ba16a49 commit 5537d25

10 files changed

Lines changed: 457 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
- Support for Flutter 3.38
33
- Added `Color` methods, `SafeArea` widget, and `showBottomSheet` function.
44
- Added `MaterialButton`, `Autocomplete`, and related classes.
5+
- Added `Locale`, `TextSpan`, and `Text.rich()` constructor.
56
- Exported multiple wrappers (thanks @Zverik)
67
- Fix typo in example code (thanks @chan150)
78

lib/flutter_eval.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ import 'package:flutter_eval/src/painting/colors.dart';
5858
import 'package:flutter_eval/src/painting/decoration.dart';
5959
import 'package:flutter_eval/src/painting/edge_insets.dart';
6060
import 'package:flutter_eval/src/painting/image_provider.dart';
61+
import 'package:flutter_eval/src/painting/inline_span.dart';
62+
import 'package:flutter_eval/src/painting/text_span.dart';
6163
import 'package:flutter_eval/src/painting/text_style.dart';
6264
import 'package:flutter_eval/src/rendering.dart';
6365
import 'package:flutter_eval/src/rendering/box.dart';
@@ -70,6 +72,7 @@ import 'package:flutter_eval/src/scheduler/ticker.dart';
7072
import 'package:flutter_eval/src/services.dart';
7173
import 'package:flutter_eval/src/sky_engine/ui/geometry.dart';
7274
import 'package:flutter_eval/src/sky_engine/ui/image.dart';
75+
import 'package:flutter_eval/src/sky_engine/ui/locale.dart';
7376
import 'package:flutter_eval/src/sky_engine/ui/painting.dart';
7477
import 'package:flutter_eval/src/sky_engine/ui/pointer.dart';
7578
import 'package:flutter_eval/src/sky_engine/ui/text.dart';
@@ -260,6 +263,9 @@ class FlutterEvalPlugin implements EvalPlugin {
260263
$TextEditingValue.$declaration,
261264
$Autocomplete.$declaration,
262265
$MaterialButton.$declaration,
266+
$Locale.$declaration,
267+
$InlineSpan.$declaration,
268+
$TextSpan.$declaration,
263269
];
264270

265271
for (final cls in classes) {
@@ -413,6 +419,8 @@ class FlutterEvalPlugin implements EvalPlugin {
413419
$Autocomplete.configureForRuntime(runtime);
414420
$MaterialButton.configureForRuntime(runtime);
415421
$OptionsViewOpenDirection.configureForRuntime(runtime);
422+
$TextSpan.configureForRuntime(runtime);
423+
$Locale.configureForRuntime(runtime);
416424

417425
$showModalBottomSheetFn.configureForRuntime(runtime);
418426

@@ -576,6 +584,8 @@ class FlutterEvalPlugin implements EvalPlugin {
576584
'package:flutter/src/widgets/spacer.dart', 'Spacer.', $Spacer.$new)
577585
..registerBridgeFunc(
578586
'package:flutter/src/widgets/text.dart', 'Text.', $Text.$new)
587+
..registerBridgeFunc(
588+
'package:flutter/src/widgets/text.dart', 'Text.rich', $Text.$rich)
579589
..registerBridgeFunc('package:flutter/src/widgets/container.dart',
580590
'Container.', $Container.$new)
581591
..registerBridgeFunc('package:flutter/src/widgets/editable_text.dart',

lib/painting.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ export 'src/painting/decoration.dart';
1212
export 'src/painting/edge_insets.dart';
1313
export 'src/painting/image_provider.dart';
1414
export 'src/painting/text_style.dart';
15+
export 'src/painting/inline_span.dart';
16+
export 'src/painting/text_span.dart';

lib/src/painting.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ export 'src/painting/decoration.dart';
1313
export 'src/painting/edge_insets.dart';
1414
export 'src/painting/image_provider.dart';
1515
export 'src/painting/text_style.dart';
16+
export 'src/painting/inline_span.dart';
17+
export 'src/painting/text_span.dart';
1618
''';

lib/src/painting/inline_span.dart

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import 'package:dart_eval/dart_eval_bridge.dart';
2+
import 'package:dart_eval/stdlib/core.dart';
3+
import 'package:flutter/material.dart' show InlineSpan;
4+
import 'package:flutter_eval/painting.dart' show $TextStyle;
5+
6+
/// dart_eval wrapper binding for [InlineSpan]
7+
class $InlineSpan implements $Instance {
8+
/// Configure this class for use in a [Runtime]
9+
static void configureForRuntime(Runtime runtime) {}
10+
11+
/// Compile-time type specification of [$InlineSpan]
12+
static const $spec = BridgeTypeSpec(
13+
'package:flutter/src/painting/inline_span.dart',
14+
'InlineSpan',
15+
);
16+
17+
/// Compile-time type declaration of [$InlineSpan]
18+
static const $type = BridgeTypeRef($spec);
19+
20+
/// Compile-time class declaration of [$InlineSpan]
21+
static const $declaration = BridgeClassDef(
22+
BridgeClassType($type, isAbstract: true),
23+
constructors: {
24+
'': BridgeConstructorDef(
25+
BridgeFunctionDef(
26+
returns: BridgeTypeAnnotation($type),
27+
namedParams: [
28+
BridgeParameter(
29+
'style',
30+
BridgeTypeAnnotation(
31+
$TextStyle.$type,
32+
nullable: true,
33+
),
34+
true,
35+
),
36+
],
37+
params: [],
38+
),
39+
),
40+
},
41+
wrap: true,
42+
bridge: false,
43+
);
44+
45+
final $Instance _superclass;
46+
47+
@override
48+
final InlineSpan $value;
49+
50+
@override
51+
InlineSpan get $reified => $value;
52+
53+
/// Wrap a [InlineSpan] in a [$InlineSpan]
54+
$InlineSpan.wrap(this.$value) : _superclass = $Object($value);
55+
56+
@override
57+
int $getRuntimeType(Runtime runtime) => runtime.lookupType($spec);
58+
59+
@override
60+
$Value? $getProperty(Runtime runtime, String identifier) {
61+
return _superclass.$getProperty(runtime, identifier);
62+
}
63+
64+
@override
65+
void $setProperty(Runtime runtime, String identifier, $Value value) {
66+
return _superclass.$setProperty(runtime, identifier, value);
67+
}
68+
}

lib/src/painting/text_span.dart

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
import 'package:dart_eval/dart_eval_bridge.dart';
2+
import 'package:flutter/material.dart' show TextSpan;
3+
import 'package:flutter_eval/painting.dart' show $TextStyle;
4+
import 'package:flutter_eval/src/painting/inline_span.dart';
5+
import 'package:flutter_eval/src/sky_engine/ui/locale.dart';
6+
7+
/// dart_eval wrapper binding for [TextSpan]
8+
class $TextSpan implements $Instance {
9+
/// Configure this class for use in a [Runtime]
10+
static void configureForRuntime(Runtime runtime) {
11+
runtime.registerBridgeFunc(
12+
'package:flutter/src/painting/text_span.dart',
13+
'TextSpan.',
14+
$TextSpan.$new,
15+
);
16+
}
17+
18+
/// Compile-time type specification of [$TextSpan]
19+
static const $spec = BridgeTypeSpec(
20+
'package:flutter/src/painting/text_span.dart',
21+
'TextSpan',
22+
);
23+
24+
/// Compile-time type declaration of [$TextSpan]
25+
static const $type = BridgeTypeRef($spec);
26+
27+
/// Compile-time class declaration of [$TextSpan]
28+
static const $declaration = BridgeClassDef(
29+
BridgeClassType($type, $extends: $InlineSpan.$type),
30+
constructors: {
31+
'': BridgeConstructorDef(
32+
BridgeFunctionDef(
33+
returns: BridgeTypeAnnotation($type),
34+
namedParams: [
35+
BridgeParameter(
36+
'text',
37+
BridgeTypeAnnotation(
38+
BridgeTypeRef(CoreTypes.string, []),
39+
nullable: true,
40+
),
41+
true,
42+
),
43+
BridgeParameter(
44+
'children',
45+
BridgeTypeAnnotation(
46+
BridgeTypeRef(
47+
CoreTypes.list, [BridgeTypeAnnotation($InlineSpan.$type)]),
48+
nullable: true,
49+
),
50+
true,
51+
),
52+
BridgeParameter(
53+
'style',
54+
BridgeTypeAnnotation(
55+
$TextStyle.$type,
56+
nullable: true,
57+
),
58+
true,
59+
),
60+
BridgeParameter(
61+
'semanticsLabel',
62+
BridgeTypeAnnotation(
63+
BridgeTypeRef(CoreTypes.string, []),
64+
nullable: true,
65+
),
66+
true,
67+
),
68+
BridgeParameter(
69+
'semanticsIdentifier',
70+
BridgeTypeAnnotation(
71+
BridgeTypeRef(CoreTypes.string, []),
72+
nullable: true,
73+
),
74+
true,
75+
),
76+
BridgeParameter(
77+
'locale',
78+
BridgeTypeAnnotation($Locale.$type, nullable: true),
79+
true,
80+
),
81+
BridgeParameter(
82+
'spellOut',
83+
BridgeTypeAnnotation(
84+
BridgeTypeRef(CoreTypes.bool, []),
85+
nullable: true
86+
),
87+
true,
88+
),
89+
],
90+
params: [],
91+
),
92+
),
93+
},
94+
wrap: true,
95+
bridge: false,
96+
);
97+
98+
/// Wrapper for the [TextSpan.new] constructor
99+
static $Value? $new(Runtime runtime, $Value? thisValue, List<$Value?> args) {
100+
return $TextSpan.wrap(
101+
TextSpan(
102+
text: args[0]?.$value,
103+
children: (args[1]?.$reified as List?)?.cast(),
104+
style: args[2]?.$value,
105+
semanticsLabel: args[3]?.$value,
106+
semanticsIdentifier: args[4]?.$value,
107+
locale: args[5]?.$value,
108+
spellOut: args[6]?.$value,
109+
),
110+
);
111+
}
112+
113+
final $Instance _superclass;
114+
115+
@override
116+
final TextSpan $value;
117+
118+
@override
119+
TextSpan get $reified => $value;
120+
121+
/// Wrap a [TextSpan] in a [$TextSpan]
122+
$TextSpan.wrap(this.$value) : _superclass = $InlineSpan.wrap($value);
123+
124+
@override
125+
int $getRuntimeType(Runtime runtime) => runtime.lookupType($spec);
126+
127+
@override
128+
$Value? $getProperty(Runtime runtime, String identifier) {
129+
return _superclass.$getProperty(runtime, identifier);
130+
}
131+
132+
@override
133+
void $setProperty(Runtime runtime, String identifier, $Value value) {
134+
return _superclass.$setProperty(runtime, identifier, value);
135+
}
136+
}

0 commit comments

Comments
 (0)