@@ -56,16 +56,19 @@ class CssBoxWidget extends StatelessWidget {
56
56
? _generateMarkerBoxSpan (style)
57
57
: null ;
58
58
59
+ final direction = _checkTextDirection (context, textDirection);
60
+ final padding = style.padding? .resolve (direction);
61
+
59
62
return _CSSBoxRenderer (
60
63
width: style.width ?? Width .auto (),
61
64
height: style.height ?? Height .auto (),
62
- paddingSize: style. padding? .collapsedSize ?? Size .zero,
65
+ paddingSize: padding? .collapsedSize ?? Size .zero,
63
66
borderSize: style.border? .dimensions.collapsedSize ?? Size .zero,
64
67
margins: style.margin ?? Margins .zero,
65
68
display: style.display ?? Display .inline,
66
69
childIsReplaced: childIsReplaced,
67
70
emValue: _calculateEmValue (style, context),
68
- textDirection: _checkTextDirection (context, textDirection) ,
71
+ textDirection: direction ,
69
72
shrinkWrap: shrinkWrap,
70
73
children: [
71
74
Container (
@@ -74,7 +77,7 @@ class CssBoxWidget extends StatelessWidget {
74
77
color: style.backgroundColor, //Colors the padding and content boxes
75
78
),
76
79
width: _shouldExpandToFillBlock () ? double .infinity : null ,
77
- padding: style. padding ?? EdgeInsets .zero ,
80
+ padding: padding,
78
81
child: top
79
82
? child
80
83
: MediaQuery (
@@ -224,8 +227,8 @@ class _CSSBoxRenderer extends MultiChildRenderObjectWidget {
224
227
final bool shrinkWrap;
225
228
226
229
@override
227
- _RenderCSSBox createRenderObject (BuildContext context) {
228
- return _RenderCSSBox (
230
+ RenderCSSBox createRenderObject (BuildContext context) {
231
+ return RenderCSSBox (
229
232
display: display,
230
233
width: width..normalize (emValue),
231
234
height: height..normalize (emValue),
@@ -239,7 +242,7 @@ class _CSSBoxRenderer extends MultiChildRenderObjectWidget {
239
242
}
240
243
241
244
@override
242
- void updateRenderObject (BuildContext context, _RenderCSSBox renderObject) {
245
+ void updateRenderObject (BuildContext context, RenderCSSBox renderObject) {
243
246
renderObject
244
247
..display = display
245
248
..width = (width..normalize (emValue))
@@ -253,10 +256,21 @@ class _CSSBoxRenderer extends MultiChildRenderObjectWidget {
253
256
}
254
257
255
258
Margins _preProcessMargins (Margins margins, bool shrinkWrap) {
256
- Margin leftMargin = margins.left ?? Margin .zero ();
257
- Margin rightMargin = margins.right ?? Margin .zero ();
258
- Margin topMargin = margins.top ?? Margin .zero ();
259
- Margin bottomMargin = margins.bottom ?? Margin .zero ();
259
+ late Margin leftMargin;
260
+ late Margin rightMargin;
261
+ Margin topMargin = margins.top ?? margins.blockStart ?? Margin .zero ();
262
+ Margin bottomMargin = margins.bottom ?? margins.blockEnd ?? Margin .zero ();
263
+
264
+ switch (textDirection) {
265
+ case TextDirection .rtl:
266
+ leftMargin = margins.left ?? margins.inlineEnd ?? Margin .zero ();
267
+ rightMargin = margins.right ?? margins.inlineStart ?? Margin .zero ();
268
+ break ;
269
+ case TextDirection .ltr:
270
+ leftMargin = margins.left ?? margins.inlineStart ?? Margin .zero ();
271
+ rightMargin = margins.right ?? margins.inlineEnd ?? Margin .zero ();
272
+ break ;
273
+ }
260
274
261
275
//Preprocess margins to a pixel value
262
276
leftMargin.normalize (emValue);
@@ -295,12 +309,14 @@ class _CSSBoxRenderer extends MultiChildRenderObjectWidget {
295
309
}
296
310
}
297
311
312
+ @visibleForTesting
313
+
298
314
/// Implements the CSS layout algorithm
299
- class _RenderCSSBox extends RenderBox
315
+ class RenderCSSBox extends RenderBox
300
316
with
301
317
ContainerRenderObjectMixin <RenderBox , CSSBoxParentData >,
302
318
RenderBoxContainerDefaultsMixin <RenderBox , CSSBoxParentData > {
303
- _RenderCSSBox ({
319
+ RenderCSSBox ({
304
320
required Display display,
305
321
required Width width,
306
322
required Height height,
@@ -593,7 +609,20 @@ class _RenderCSSBox extends RenderBox
593
609
final offsetHeight = distance -
594
610
(markerBox.getDistanceToBaseline (TextBaseline .alphabetic) ??
595
611
markerBox.size.height);
596
- markerBoxParentData.offset = Offset (- markerBox.size.width, offsetHeight);
612
+ switch (_textDirection) {
613
+ case TextDirection .rtl:
614
+ markerBoxParentData.offset = Offset (
615
+ child.size.width,
616
+ offsetHeight,
617
+ );
618
+ break ;
619
+ case TextDirection .ltr:
620
+ markerBoxParentData.offset = Offset (
621
+ - markerBox.size.width,
622
+ offsetHeight,
623
+ );
624
+ break ;
625
+ }
597
626
}
598
627
}
599
628
@@ -701,10 +730,11 @@ class _RenderCSSBox extends RenderBox
701
730
}
702
731
703
732
return Margins (
704
- left: marginLeft,
705
- right: marginRight,
706
- top: margins.top,
707
- bottom: margins.bottom);
733
+ left: marginLeft,
734
+ right: marginRight,
735
+ top: margins.top,
736
+ bottom: margins.bottom,
737
+ );
708
738
}
709
739
710
740
@override
0 commit comments