11import 'package:dogs_core/dogs_converter_utils.dart' ;
22import 'package:dogs_core/dogs_core.dart' ;
3- import 'package:flutter/painting.dart' ;
3+ import 'package:dogs_core/dogs_schema.dart' ;
4+ import 'package:flutter/material.dart' ;
45
56List <double > _parseDoubleTuple4 (dynamic value, DogEngine engine, DogConverter converter) {
67 var list = converter.expects <List >(value, engine);
@@ -32,6 +33,10 @@ class FlutterOffsetConverter extends SimpleDogConverter<Offset> {
3233 serialize (Offset value, DogEngine engine) {
3334 return < String , dynamic > {"dx" : value.dx, "dy" : value.dy};
3435 }
36+
37+ @override
38+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) =>
39+ object ({"dx" : number (), "dy" : number ()});
3540}
3641
3742@linkSerializer
@@ -48,6 +53,10 @@ class FlutterSizeConverter extends SimpleDogConverter<Size> {
4853 serialize (Size value, DogEngine engine) {
4954 return < String , dynamic > {"width" : value.width, "height" : value.height};
5055 }
56+
57+ @override
58+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) =>
59+ object ({"width" : number (), "height" : number ()});
5160}
5261
5362@linkSerializer
@@ -64,6 +73,9 @@ class FlutterRectConverter extends SimpleDogConverter<Rect> {
6473 serialize (Rect value, DogEngine engine) {
6574 return [value.left, value.top, value.right, value.bottom];
6675 }
76+
77+ @override
78+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) => number ().array ().length (4 );
6779}
6880
6981@linkSerializer
@@ -80,6 +92,9 @@ class FlutterEdgeInsetsConverter extends SimpleDogConverter<EdgeInsets> {
8092 serialize (EdgeInsets value, DogEngine engine) {
8193 return [value.left, value.top, value.right, value.bottom];
8294 }
95+
96+ @override
97+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) => number ().array ().length (4 );
8398}
8499
85100@linkSerializer
@@ -105,6 +120,9 @@ class FlutterRadiusConverter extends SimpleDogConverter<Radius> {
105120 }
106121 throw DogSerializerException (message: "Invalid radius value" );
107122 }
123+
124+ @override
125+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) => number ();
108126}
109127
110128@linkSerializer
@@ -126,6 +144,9 @@ class FlutterBorderRadiusConverter extends SimpleDogConverter<BorderRadius> {
126144 serialize (BorderRadius value, DogEngine engine) {
127145 return [value.topLeft.x, value.topRight.x, value.bottomLeft.x, value.bottomRight.x];
128146 }
147+
148+ @override
149+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) => number ().array ().length (4 );
129150}
130151
131152@linkSerializer
@@ -160,4 +181,74 @@ class FlutterRRectConverter extends SimpleDogConverter<RRect> {
160181 ),
161182 };
162183 }
184+
185+ @override
186+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) =>
187+ object ({"dimensions" : engine.describe <Rect >(), "radii" : engine.describe <BorderRadius >()});
188+ }
189+
190+ @linkSerializer
191+ class FlutterBoxConstraintsConverter extends SimpleDogConverter <BoxConstraints > {
192+ FlutterBoxConstraintsConverter () : super (serialName: "FLBoxConstraints" );
193+
194+ @override
195+ BoxConstraints deserialize (value, DogEngine engine) {
196+ final [minWidth, maxWidth, minHeight, maxHeight] = _parseDoubleTuple4 (value, engine, this );
197+ return BoxConstraints (
198+ minWidth: minWidth,
199+ maxWidth: maxWidth,
200+ minHeight: minHeight,
201+ maxHeight: maxHeight,
202+ );
203+ }
204+
205+ @override
206+ serialize (BoxConstraints value, DogEngine engine) {
207+ return [value.minWidth, value.maxWidth, value.minHeight, value.maxHeight];
208+ }
209+
210+ @override
211+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) => number ().array ().length (4 );
212+ }
213+
214+ @linkSerializer
215+ class FlutterAlignmentConverter extends SimpleDogConverter <Alignment > {
216+ FlutterAlignmentConverter () : super (serialName: "FLAlignment" );
217+
218+ @override
219+ Alignment deserialize (value, DogEngine engine) {
220+ var map = readAsMap (value, engine);
221+ return Alignment (map.read <double >("x" ), map.read <double >("y" ));
222+ }
223+
224+ @override
225+ serialize (Alignment value, DogEngine engine) {
226+ return < String , dynamic > {"x" : value.x, "y" : value.y};
227+ }
228+
229+ @override
230+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) =>
231+ object ({"x" : number (), "y" : number ()});
232+ }
233+
234+ @linkSerializer
235+ class FlutterMatrix4Converter extends SimpleDogConverter <Matrix4 > {
236+ FlutterMatrix4Converter () : super (serialName: "FLMatrix4" );
237+
238+ @override
239+ Matrix4 deserialize (value, DogEngine engine) {
240+ var list = expects <List >(value, engine);
241+ if (list.length != 16 ) {
242+ throw DogSerializerException (message: "Expected list of 16 numeric values" , converter: this );
243+ }
244+ return Matrix4 .fromList (list.map ((e) => readAs <double >(e, engine)).toList ());
245+ }
246+
247+ @override
248+ serialize (Matrix4 value, DogEngine engine) {
249+ return value.storage;
250+ }
251+
252+ @override
253+ SchemaType describeOutput (DogEngine engine, SchemaConfig config) => number ().array ().length (16 );
163254}
0 commit comments