Showing
2 changed files
with
88 additions
and
1 deletions
| @@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
| 16 | 16 | ||
| 17 | import 'dart:math' as math; | 17 | import 'dart:math' as math; |
| 18 | 18 | ||
| 19 | +import 'package:pdf/widgets.dart'; | ||
| 19 | import 'package:vector_math/vector_math_64.dart'; | 20 | import 'package:vector_math/vector_math_64.dart'; |
| 20 | 21 | ||
| 21 | import '../../pdf.dart'; | 22 | import '../../pdf.dart'; |
| @@ -164,11 +165,14 @@ class Wrap extends MultiChildWidget with SpanningWidget { | @@ -164,11 +165,14 @@ class Wrap extends MultiChildWidget with SpanningWidget { | ||
| 164 | double? mainAxisLimit = 0.0; | 165 | double? mainAxisLimit = 0.0; |
| 165 | var flipMainAxis = false; | 166 | var flipMainAxis = false; |
| 166 | var flipCrossAxis = false; | 167 | var flipCrossAxis = false; |
| 167 | - | 168 | + final textDirection = Directionality.of(context); |
| 168 | switch (direction) { | 169 | switch (direction) { |
| 169 | case Axis.horizontal: | 170 | case Axis.horizontal: |
| 170 | childConstraints = BoxConstraints(maxWidth: constraints.maxWidth); | 171 | childConstraints = BoxConstraints(maxWidth: constraints.maxWidth); |
| 171 | mainAxisLimit = constraints.maxWidth; | 172 | mainAxisLimit = constraints.maxWidth; |
| 173 | + if (textDirection == TextDirection.rtl) { | ||
| 174 | + flipMainAxis = true; | ||
| 175 | + } | ||
| 172 | if (verticalDirection == VerticalDirection.down) { | 176 | if (verticalDirection == VerticalDirection.down) { |
| 173 | flipCrossAxis = true; | 177 | flipCrossAxis = true; |
| 174 | } | 178 | } |
| @@ -179,6 +183,9 @@ class Wrap extends MultiChildWidget with SpanningWidget { | @@ -179,6 +183,9 @@ class Wrap extends MultiChildWidget with SpanningWidget { | ||
| 179 | if (verticalDirection == VerticalDirection.down) { | 183 | if (verticalDirection == VerticalDirection.down) { |
| 180 | flipMainAxis = true; | 184 | flipMainAxis = true; |
| 181 | } | 185 | } |
| 186 | + if (textDirection == TextDirection.rtl) { | ||
| 187 | + flipCrossAxis = true; | ||
| 188 | + } | ||
| 182 | break; | 189 | break; |
| 183 | } | 190 | } |
| 184 | 191 |
| @@ -34,6 +34,17 @@ final _redBox = Container( | @@ -34,6 +34,17 @@ final _redBox = Container( | ||
| 34 | color: PdfColors.red, | 34 | color: PdfColors.red, |
| 35 | ); | 35 | ); |
| 36 | 36 | ||
| 37 | +final _yellowBox = Container( | ||
| 38 | + width: 50, | ||
| 39 | + height: 50, | ||
| 40 | + color: PdfColors.yellow, | ||
| 41 | +); | ||
| 42 | + | ||
| 43 | +final _greenBox = Container( | ||
| 44 | + width: 50, | ||
| 45 | + height: 50, | ||
| 46 | + color: PdfColors.green, | ||
| 47 | +); | ||
| 37 | void main() { | 48 | void main() { |
| 38 | setUpAll(() { | 49 | setUpAll(() { |
| 39 | Document.debug = true; | 50 | Document.debug = true; |
| @@ -124,6 +135,75 @@ void main() { | @@ -124,6 +135,75 @@ void main() { | ||
| 124 | ); | 135 | ); |
| 125 | }); | 136 | }); |
| 126 | 137 | ||
| 138 | + test('Wrap Should render blue,red,yellow ordered RTL', () { | ||
| 139 | + pdf.addPage( | ||
| 140 | + Page( | ||
| 141 | + textDirection: TextDirection.rtl, | ||
| 142 | + pageFormat: const PdfPageFormat(150, 150), | ||
| 143 | + build: (Context context) => SizedBox( | ||
| 144 | + width: 150, | ||
| 145 | + height: 150, | ||
| 146 | + child: Wrap( | ||
| 147 | + children: [_blueBox, _redBox,_yellowBox], | ||
| 148 | + ) | ||
| 149 | + ), | ||
| 150 | + ), | ||
| 151 | + ); | ||
| 152 | + }); | ||
| 153 | + | ||
| 154 | + test('Wrap Should render blue,red,yellow ordered LTR', () { | ||
| 155 | + pdf.addPage( | ||
| 156 | + Page( | ||
| 157 | + textDirection: TextDirection.ltr, | ||
| 158 | + pageFormat: const PdfPageFormat(150, 150), | ||
| 159 | + build: (Context context) => SizedBox( | ||
| 160 | + width: 150, | ||
| 161 | + height: 150, | ||
| 162 | + child: Wrap( | ||
| 163 | + children: [_blueBox, _redBox,_yellowBox], | ||
| 164 | + ) | ||
| 165 | + ), | ||
| 166 | + ), | ||
| 167 | + ); | ||
| 168 | + }); | ||
| 169 | + test('Wrap Should render blue,red,yellow ordered RTL aligned center', () { | ||
| 170 | + pdf.addPage( | ||
| 171 | + Page( | ||
| 172 | + textDirection: TextDirection.rtl, | ||
| 173 | + pageFormat: const PdfPageFormat(150, 150), | ||
| 174 | + build: (Context context) => SizedBox( | ||
| 175 | + width: 150, | ||
| 176 | + height: 150, | ||
| 177 | + child: Wrap( | ||
| 178 | + spacing: 10, | ||
| 179 | + runSpacing: 10, | ||
| 180 | + runAlignment: WrapAlignment.center, | ||
| 181 | + children: [_blueBox, _redBox,_yellowBox], | ||
| 182 | + ) | ||
| 183 | + ), | ||
| 184 | + ), | ||
| 185 | + ); | ||
| 186 | + }); | ||
| 187 | + | ||
| 188 | + test('Wrap Should render blue,red,yellow ordered RTL aligned bottom', () { | ||
| 189 | + pdf.addPage( | ||
| 190 | + Page( | ||
| 191 | + textDirection: TextDirection.rtl, | ||
| 192 | + pageFormat: const PdfPageFormat(150, 150), | ||
| 193 | + build: (Context context) => SizedBox( | ||
| 194 | + width: 150, | ||
| 195 | + height: 150, | ||
| 196 | + child: Wrap( | ||
| 197 | + spacing: 10, | ||
| 198 | + runSpacing: 10, | ||
| 199 | + runAlignment: WrapAlignment.end, | ||
| 200 | + children: [_blueBox, _redBox,_yellowBox], | ||
| 201 | + ) | ||
| 202 | + ), | ||
| 203 | + ), | ||
| 204 | + ); | ||
| 205 | + }); | ||
| 206 | + | ||
| 127 | tearDownAll(() async { | 207 | tearDownAll(() async { |
| 128 | final file = File('rtl-layout.pdf'); | 208 | final file = File('rtl-layout.pdf'); |
| 129 | await file.writeAsBytes(await pdf.save()); | 209 | await file.writeAsBytes(await pdf.save()); |
-
Please register or login to post a comment