Skip to content

Commit 11cd850

Browse files
committed
[NODE] Complies with the new specs where all widgets inherit from node
1 parent bc59dd7 commit 11cd850

13 files changed

+89
-62
lines changed

package/pheno_ui/lib/layout/figma_frame_layout_none.dart

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,47 +38,47 @@ class FigmaFrameLayoutNone extends MultiChildLayoutDelegate {
3838
layoutChild(i, BoxConstraints.loose(size));
3939
positionChild(i, Offset.zero);
4040
} else {
41-
var left = child.dimensions!.x;
42-
var right = dimensions.width - child.dimensions!.x - child.dimensions!.width;
43-
var top = child.dimensions!.y;
44-
var bottom = dimensions.height - child.dimensions!.y - child.dimensions!.height;
41+
var left = child.dimensions.x;
42+
var right = dimensions.width - child.dimensions.x - child.dimensions.width;
43+
var top = child.dimensions.y;
44+
var bottom = dimensions.height - child.dimensions.y - child.dimensions.height;
4545

4646
var widthScale = (size.width / dimensions.width);
4747
var heightScale = (size.height / dimensions.height);
4848

49-
var width = switch (child.dimensions!.constraints.horizontal) {
50-
FigmaDimensionsConstraintType.min => child.dimensions!.width,
51-
FigmaDimensionsConstraintType.max => child.dimensions!.width,
52-
FigmaDimensionsConstraintType.center => child.dimensions!.width,
49+
var width = switch (child.dimensions.constraints.horizontal) {
50+
FigmaDimensionsConstraintType.min => child.dimensions.width,
51+
FigmaDimensionsConstraintType.max => child.dimensions.width,
52+
FigmaDimensionsConstraintType.center => child.dimensions.width,
5353
FigmaDimensionsConstraintType.stretch => (size.width - left - right).abs(),
54-
FigmaDimensionsConstraintType.scale => child.dimensions!.width * widthScale,
54+
FigmaDimensionsConstraintType.scale => child.dimensions.width * widthScale,
5555
};
5656

57-
var height = switch (child.dimensions!.constraints.vertical) {
58-
FigmaDimensionsConstraintType.min => child.dimensions!.height,
59-
FigmaDimensionsConstraintType.max => child.dimensions!.height,
60-
FigmaDimensionsConstraintType.center => child.dimensions!.height,
57+
var height = switch (child.dimensions.constraints.vertical) {
58+
FigmaDimensionsConstraintType.min => child.dimensions.height,
59+
FigmaDimensionsConstraintType.max => child.dimensions.height,
60+
FigmaDimensionsConstraintType.center => child.dimensions.height,
6161
FigmaDimensionsConstraintType.stretch => (size.height - top - bottom).abs(),
62-
FigmaDimensionsConstraintType.scale => child.dimensions!.height * heightScale,
62+
FigmaDimensionsConstraintType.scale => child.dimensions.height * heightScale,
6363
};
6464

6565
layoutChild(i, BoxConstraints.tightFor(
6666
width: width,
6767
height: height,
6868
));
6969

70-
var x = switch (child.dimensions!.constraints.horizontal) {
70+
var x = switch (child.dimensions.constraints.horizontal) {
7171
FigmaDimensionsConstraintType.min => left,
7272
FigmaDimensionsConstraintType.max => size.width - right - width,
73-
FigmaDimensionsConstraintType.center => size.width * 0.5 + (left + child.dimensions!.width * 0.5) - dimensions.width * 0.5 - width * 0.5,
73+
FigmaDimensionsConstraintType.center => size.width * 0.5 + (left + child.dimensions.width * 0.5) - dimensions.width * 0.5 - width * 0.5,
7474
FigmaDimensionsConstraintType.stretch => min(left, size.width - right),
7575
FigmaDimensionsConstraintType.scale => left * widthScale,
7676
};
7777

78-
var y = switch (child.dimensions!.constraints.vertical) {
78+
var y = switch (child.dimensions.constraints.vertical) {
7979
FigmaDimensionsConstraintType.min => top,
8080
FigmaDimensionsConstraintType.max => size.height - bottom - height,
81-
FigmaDimensionsConstraintType.center => size.height * 0.5 + (top + child.dimensions!.height * 0.5) - dimensions.height * 0.5 - height * 0.5,
81+
FigmaDimensionsConstraintType.center => size.height * 0.5 + (top + child.dimensions.height * 0.5) - dimensions.height * 0.5 - height * 0.5,
8282
FigmaDimensionsConstraintType.stretch => min(top, size.height - bottom),
8383
FigmaDimensionsConstraintType.scale => top * heightScale,
8484
};

package/pheno_ui/lib/models/figma_component_model.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ class FigmaComponentModel extends FigmaNodeModel {
88
required super.type,
99
required super.userData,
1010
required super.info,
11-
super.dimensions,
11+
required super.dimensions,
12+
required super.opacity,
13+
required super.effects,
1214
super.componentRefs,
1315
});
1416

package/pheno_ui/lib/models/figma_dimensions_model.dart

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class FigmaDimensionsConstraints {
5252
final FigmaDimensionsConstraintType horizontal;
5353
final FigmaDimensionsConstraintType vertical;
5454

55-
FigmaDimensionsConstraints({
55+
const FigmaDimensionsConstraints({
5656
required this.horizontal,
5757
required this.vertical
5858
});
@@ -77,6 +77,32 @@ class FigmaDimensionsModel {
7777
final double rotation;
7878
final FigmaDimensionsConstraints constraints;
7979

80+
FigmaDimensionsModel({
81+
double? x,
82+
double? y,
83+
double? width,
84+
double? height,
85+
FigmaDimensionsPositioning? positioning,
86+
BoxConstraints? sizeConstraints,
87+
FigmaDimensionsSizing? widthMode,
88+
FigmaDimensionsSizing? heightMode,
89+
double? rotation,
90+
FigmaDimensionsConstraints? constraints,
91+
}):
92+
x = x ?? 0,
93+
y = y ?? 0,
94+
width = width ?? 0,
95+
height = height ?? 0,
96+
positioning = positioning ?? FigmaDimensionsPositioning.absolute,
97+
sizeConstraints = sizeConstraints ?? const BoxConstraints(),
98+
widthMode = widthMode ?? FigmaDimensionsSizing.fixed,
99+
heightMode = heightMode ?? FigmaDimensionsSizing.fixed,
100+
rotation = rotation ?? 0.0,
101+
constraints = constraints ?? const FigmaDimensionsConstraints(
102+
horizontal: FigmaDimensionsConstraintType.min,
103+
vertical: FigmaDimensionsConstraintType.min,
104+
);
105+
80106
FigmaDimensionsModel.copy(FigmaDimensionsModel other, {
81107
double? x,
82108
double? y,

package/pheno_ui/lib/models/figma_effects_model.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import '../widgets/background_blur.dart';
88

99
class FigmaEffectsModel {
1010
final List<_FigmaEffect> _effects;
11-
FigmaEffectsModel._(this._effects);
11+
12+
FigmaEffectsModel([this._effects = const []]);
1213

1314
factory FigmaEffectsModel.fromJson(List<dynamic> json) {
1415
List<_FigmaEffect> effects = [];
@@ -56,7 +57,7 @@ class FigmaEffectsModel {
5657
return bVal - aVal;
5758
});
5859

59-
return FigmaEffectsModel._(effects);
60+
return FigmaEffectsModel(effects);
6061
}
6162

6263
Widget apply(Widget child) {

package/pheno_ui/lib/models/figma_frame_model.dart

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
import 'package:flutter/widgets.dart';
2-
import 'package:pheno_ui/pheno_ui.dart';
32

3+
import 'figma_simple_style_model.dart';
4+
import '../pheno_ui.dart';
45
import 'figma_layout_model.dart';
5-
import 'figma_node_model.dart';
6-
import 'figma_style_model.dart';
76

8-
class FigmaFrameModel extends FigmaNodeModel {
7+
class FigmaFrameModel extends FigmaSimpleStyleModel {
98
final FigmaLayoutModel layout;
109
final List<Widget> children;
1110

12-
@override
13-
FigmaStyleModel get style => super.style!;
14-
1511
FigmaFrameModel.fromJson(Map<String, dynamic> json):
1612
layout = FigmaLayoutModel.fromJson(json['layout']),
1713
children = List<Widget>.from(PhenoUi().fromJsonList(json['children'])),

package/pheno_ui/lib/models/figma_node_model.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,29 @@ class FigmaNodeInfoModel {
2626
class FigmaNodeModel {
2727
final String type;
2828
final FigmaNodeInfoModel info;
29-
final FigmaDimensionsModel? dimensions;
30-
final FigmaStyleModel? style;
31-
final FigmaEffectsModel? effects;
29+
final FigmaDimensionsModel dimensions;
30+
final FigmaEffectsModel effects;
3231
final Map<String, dynamic>? componentRefs;
3332
final FigmaUserData userData;
33+
final double opacity;
3434

3535
const FigmaNodeModel({
3636
required this.type,
3737
required this.userData,
3838
required this.info,
39-
this.dimensions,
40-
this.style,
41-
this.effects,
39+
required this.dimensions,
40+
required this.effects,
41+
required this.opacity,
4242
this.componentRefs,
4343
});
4444

4545
FigmaNodeModel.fromJson(Map<String, dynamic> json):
4646
type = json['type'],
4747
info = FigmaNodeInfoModel.fromJson(json['__info']),
48-
dimensions = json.containsKey('dimensions') ? FigmaDimensionsModel.fromJson(json['dimensions']) : null,
49-
style = json.containsKey('style') ? FigmaStyleModel.fromJson(json['style']) : null,
50-
effects = json.containsKey('effects') ? FigmaEffectsModel.fromJson(json['effects']) : null,
48+
dimensions = FigmaDimensionsModel.fromJson(json['dimensions']),
49+
effects = FigmaEffectsModel.fromJson(json['effects']),
5150
componentRefs = json['componentRefs'],
51+
opacity = json['opacity'].toDouble(),
5252
userData = FigmaUserData(json['__userData'])
5353
;
5454
}

package/pheno_ui/lib/models/figma_simple_style_model.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import '../models/figma_node_model.dart';
22
import 'figma_style_model.dart';
33

44
class FigmaSimpleStyleModel extends FigmaNodeModel {
5-
@override
6-
FigmaStyleModel get style => super.style!;
5+
final FigmaStyleModel style;
76

87
FigmaSimpleStyleModel.fromJson(Map<String, dynamic> json):
9-
super.fromJson(json);
8+
style = FigmaStyleModel.fromJson(json['style']),
9+
super.fromJson(json);
1010
}

package/pheno_ui/lib/models/figma_style_model.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ class FigmaStyleBorder extends Border {
6161

6262
class FigmaStyleModel {
6363
final Color? color;
64-
final double opacity;
6564
final BorderRadius? borderRadius;
6665
final Border? border;
6766
final FigmaStyleBlendMode blendMode;
@@ -73,7 +72,6 @@ class FigmaStyleModel {
7372
(json['color']['b'] * 255.0).round(),
7473
(json['color']['o'] ?? 1.0).toDouble(),
7574
),
76-
opacity = json['opacity'].toDouble(),
7775
borderRadius = json['border']['radius']['tl'] == null ? null : BorderRadius.only(
7876
topLeft: Radius.circular(json['border']['radius']['tl'].toDouble()),
7977
topRight: Radius.circular(json['border']['radius']['tr'].toDouble()),

package/pheno_ui/lib/widgets/figma_component.dart

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/widgets.dart';
2+
import '../models/figma_effects_model.dart';
23
import '../models/figma_node_model.dart';
34
import '../interface/screens.dart';
45
import '../models/figma_component_model.dart';
@@ -33,7 +34,7 @@ class FigmaComponent<T extends FigmaComponentModel, S extends FigmaComponentStat
3334
GlobalKey<S> get key => super.key as GlobalKey<S>;
3435

3536
@override
36-
FigmaDimensionsModel? get dimensions {
37+
FigmaDimensionsModel get dimensions {
3738
return key.currentState?.dimensions ?? super.dimensions;
3839
}
3940

@@ -69,6 +70,9 @@ class FigmaComponent<T extends FigmaComponentModel, S extends FigmaComponentStat
6970
info: info,
7071
widgetType: component,
7172
userData: userData,
73+
dimensions: FigmaDimensionsModel(),
74+
effects: FigmaEffectsModel(),
75+
opacity: 1.0,
7276
);
7377

7478
return FigmaComponent(
@@ -85,7 +89,7 @@ class FigmaComponent<T extends FigmaComponentModel, S extends FigmaComponentStat
8589

8690
class FigmaComponentState extends StatefulFigmaNodeState<FigmaComponent> {
8791
late final FigmaUserData userData;
88-
late FigmaDimensionsModel dimensions = widget.model.dimensions!;
92+
late FigmaDimensionsModel dimensions = widget.model.dimensions;
8993
final Map<String, dynamic> variantValues = {};
9094

9195
Map<String, FigmaComponentVariant>? variants;
@@ -117,8 +121,8 @@ class FigmaComponentState extends StatefulFigmaNodeState<FigmaComponent> {
117121
var initialVariant = _getVariant(null, null);
118122
if (initialVariant != null) {
119123
variantScale = Size(
120-
widget.model.dimensions!.width / initialVariant.model.dimensions!.width,
121-
widget.model.dimensions!.height / initialVariant.model.dimensions!.height,
124+
widget.model.dimensions.width / initialVariant.model.dimensions.width,
125+
widget.model.dimensions.height / initialVariant.model.dimensions.height,
122126
);
123127
}
124128

@@ -153,7 +157,7 @@ class FigmaComponentState extends StatefulFigmaNodeState<FigmaComponent> {
153157
if (variants == null || variants!.isEmpty) {
154158
setState(() {
155159
variant = null;
156-
dimensions = widget.model.dimensions!;
160+
dimensions = widget.model.dimensions;
157161
});
158162
return;
159163
}
@@ -166,12 +170,12 @@ class FigmaComponentState extends StatefulFigmaNodeState<FigmaComponent> {
166170

167171
setState(() {
168172
if (variant != null) {
169-
dimensions = FigmaDimensionsModel.copy(widget.model.dimensions!,
170-
width: variant!.model.dimensions!.width * variantScale.width,
171-
height: variant!.model.dimensions!.height * variantScale.height,
173+
dimensions = FigmaDimensionsModel.copy(widget.model.dimensions,
174+
width: variant!.model.dimensions.width * variantScale.width,
175+
height: variant!.model.dimensions.height * variantScale.height,
172176
);
173177
} else {
174-
dimensions = widget.model.dimensions!;
178+
dimensions = widget.model.dimensions;
175179
}
176180
});
177181
}

package/pheno_ui/lib/widgets/figma_frame.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ Widget? _buildChildrenContainer(List<Widget> children, FigmaFrameModel model) {
4141
}
4242

4343
if (model.layout.mode == FigmaLayoutMode.none) {
44-
return _buildNoneContainer(model.dimensions!, children);
44+
return _buildNoneContainer(model.dimensions, children);
4545
}
4646

4747
children = children.map((c) {
4848
if (c is FigmaNode && c.model.dimensions != null) {
49-
return dimensionWrapWidget(c, c.model.dimensions!, model.layout);
49+
return dimensionWrapWidget(c, c.model.dimensions, model.layout);
5050
}
5151
return c;
5252
}).toList();
@@ -158,7 +158,7 @@ class FigmaFrame<T extends FigmaFrameModel> extends StatelessFigmaNode<T> {
158158
border: border,
159159
borderRadius: model.style.borderRadius,
160160
),
161-
constraints: model.dimensions!.sizeConstraints,
161+
constraints: model.dimensions.sizeConstraints,
162162
child: childrenContainer,
163163
);
164164
}

0 commit comments

Comments
 (0)