@@ -18,14 +18,15 @@ Style declarationsToStyle(Map<String, List<css.Expression>> declarations) {
18
18
case 'border' :
19
19
List <css.LiteralTerm > borderWidths = value.whereType< css.LiteralTerm > ().toList ();
20
20
/// List<css.LiteralTerm> might include other values than the ones we want for [BorderSide.width] , so make sure to remove those before passing it to [ExpressionMapping]
21
- borderWidths.removeWhere ((element) => element.text != "thin" && element.text != "medium" && element.text != "thick" && ! (element is css.LengthTerm ));
21
+ borderWidths.removeWhere ((element) => element.text != "thin" && element.text != "medium" && element.text != "thick"
22
+ && ! (element is css.LengthTerm ) && ! (element is css.PercentageTerm ) && ! (element is css.EmTerm ) && ! (element is css.RemTerm ) && ! (element is css.NumberTerm ));
22
23
List <css.Expression > borderColors = value.where ((element) => ExpressionMapping .expressionToColor (element) != null ).toList ();
23
- List <css.LiteralTerm > temp = value.whereType< css.LiteralTerm > ().toList ();
24
+ List <css.LiteralTerm > potentialStyles = value.whereType< css.LiteralTerm > ().toList ();
24
25
/// Currently doesn't matter, as Flutter only supports "solid" or "none", but may support more in the future.
25
26
List <String > possibleBorderValues = ["dotted" , "dashed" , "solid" , "double" , "groove" , "ridge" , "inset" , "outset" , "none" , "hidden" ];
26
27
/// List<css.LiteralTerm> might include other values than the ones we want for [BorderSide.style] , so make sure to remove those before passing it to [ExpressionMapping]
27
- temp .removeWhere ((element) => ! possibleBorderValues.contains (element.text));
28
- List <css.LiteralTerm > borderStyles = temp ;
28
+ potentialStyles .removeWhere ((element) => ! possibleBorderValues.contains (element.text));
29
+ List <css.LiteralTerm > borderStyles = potentialStyles ;
29
30
style.border = ExpressionMapping .expressionToBorder (borderWidths, borderStyles, borderColors);
30
31
break ;
31
32
case 'color' :
@@ -66,7 +67,7 @@ Style declarationsToStyle(Map<String, List<css.Expression>> declarations) {
66
67
List <css.LiteralTerm > temp = value.whereType< css.LiteralTerm > ().toList ();
67
68
/// List<css.LiteralTerm> might include other values than the ones we want for [textDecorationStyle] , so make sure to remove those before passing it to [ExpressionMapping]
68
69
temp.removeWhere ((element) => element.text != "solid" && element.text != "double" && element.text != "dashed" && element.text != "dotted" && element.text != "wavy" );
69
- css.LiteralTerm textDecorationStyle = temp.last ?? null ;
70
+ css.LiteralTerm textDecorationStyle = temp.isNotEmpty ? temp.last : null ;
70
71
style.textDecoration = ExpressionMapping .expressionToTextDecorationLine (textDecorationList);
71
72
if (textDecorationColor != null ) style.textDecorationColor = ExpressionMapping .expressionToColor (textDecorationColor);
72
73
if (textDecorationStyle != null ) style.textDecorationStyle = ExpressionMapping .expressionToTextDecorationStyle (textDecorationStyle);
@@ -122,7 +123,7 @@ class DeclarationVisitor extends css.Visitor {
122
123
//Mapping functions
123
124
class ExpressionMapping {
124
125
125
- static Border expressionToBorder (List <css.LiteralTerm > borderWidths, List <css.LiteralTerm > borderStyles, List <css.Expression > borderColors) {
126
+ static Border expressionToBorder (List <css.Expression > borderWidths, List <css.LiteralTerm > borderStyles, List <css.Expression > borderColors) {
126
127
CustomBorderSide left = CustomBorderSide ();
127
128
CustomBorderSide top = CustomBorderSide ();
128
129
CustomBorderSide right = CustomBorderSide ();
@@ -205,16 +206,27 @@ class ExpressionMapping {
205
206
}
206
207
207
208
static double expressionToBorderWidth (css.LiteralTerm value) {
208
- switch (value.text) {
209
- case "thin" :
210
- return 2.0 ;
211
- case "medium" :
212
- return 4.0 ;
213
- case "thick" :
214
- return 6.0 ;
215
- default :
216
- return double .tryParse (value.text.replaceAll (new RegExp (r'\s+(\d+\.\d+)\s+' ), '' ));
209
+ if (value is css.NumberTerm ) {
210
+ return double .tryParse (value.text);
211
+ } else if (value is css.PercentageTerm ) {
212
+ return double .tryParse (value.text) / 100 ;
213
+ } else if (value is css.EmTerm ) {
214
+ return double .tryParse (value.text);
215
+ } else if (value is css.RemTerm ) {
216
+ return double .tryParse (value.text);
217
+ } else if (value is css.LengthTerm ) {
218
+ return double .tryParse (value.text.replaceAll (new RegExp (r'\s+(\d+\.\d+)\s+' ), '' ));
219
+ } else if (value is css.LiteralTerm ) {
220
+ switch (value.text) {
221
+ case "thin" :
222
+ return 2.0 ;
223
+ case "medium" :
224
+ return 4.0 ;
225
+ case "thick" :
226
+ return 6.0 ;
227
+ }
217
228
}
229
+ return null ;
218
230
}
219
231
220
232
static BorderStyle expressionToBorderStyle (css.LiteralTerm value) {
@@ -541,6 +553,7 @@ class ExpressionMapping {
541
553
}
542
554
543
555
static Color hslToRgbToColor (String text) {
556
+ print (text);
544
557
final hslText = text.replaceAll (')' , '' ).replaceAll (' ' , '' );
545
558
final hslValues = hslText.split (',' ).toList ();
546
559
List <double > parsedHsl = [];
0 commit comments