Showing
2 changed files
with
43 additions
and
5 deletions
@@ -5,6 +5,7 @@ | @@ -5,6 +5,7 @@ | ||
5 | * Add SizedBox Widget | 5 | * Add SizedBox Widget |
6 | * Fix RichText Widget word spacing | 6 | * Fix RichText Widget word spacing |
7 | * Improve Theme and TextStyle | 7 | * Improve Theme and TextStyle |
8 | +* Implement properly RichText.softWrap | ||
8 | 9 | ||
9 | # 1.3.7 | 10 | # 1.3.7 |
10 | * Add Pdf Creation date | 11 | * Add Pdf Creation date |
@@ -98,11 +98,10 @@ class RichText extends Widget { | @@ -98,11 +98,10 @@ class RichText extends Widget { | ||
98 | RichText( | 98 | RichText( |
99 | {@required this.text, | 99 | {@required this.text, |
100 | this.textAlign = TextAlign.left, | 100 | this.textAlign = TextAlign.left, |
101 | - bool softWrap = true, | 101 | + this.softWrap = true, |
102 | this.textScaleFactor = 1.0, | 102 | this.textScaleFactor = 1.0, |
103 | - int maxLines}) | ||
104 | - : maxLines = !softWrap ? 1 : maxLines, | ||
105 | - assert(text != null); | 103 | + this.maxLines}) |
104 | + : assert(text != null); | ||
106 | 105 | ||
107 | static const bool debug = false; | 106 | static const bool debug = false; |
108 | 107 | ||
@@ -112,6 +111,8 @@ class RichText extends Widget { | @@ -112,6 +111,8 @@ class RichText extends Widget { | ||
112 | 111 | ||
113 | final double textScaleFactor; | 112 | final double textScaleFactor; |
114 | 113 | ||
114 | + final bool softWrap; | ||
115 | + | ||
115 | final int maxLines; | 116 | final int maxLines; |
116 | 117 | ||
117 | final List<_Word> _words = <_Word>[]; | 118 | final List<_Word> _words = <_Word>[]; |
@@ -183,7 +184,9 @@ class RichText extends Widget { | @@ -183,7 +184,9 @@ class RichText extends Widget { | ||
183 | final PdfFontMetrics space = | 184 | final PdfFontMetrics space = |
184 | font.stringMetrics(' ') * (style.fontSize * textScaleFactor); | 185 | font.stringMetrics(' ') * (style.fontSize * textScaleFactor); |
185 | 186 | ||
186 | - for (String word in span.text.split(RegExp(r'\s'))) { | 187 | + final List<String> spanLines = span.text.split('\n'); |
188 | + for (int line = 0; line < spanLines.length; line++) { | ||
189 | + for (String word in spanLines[line].split(RegExp(r'\s'))) { | ||
187 | if (word.isEmpty) { | 190 | if (word.isEmpty) { |
188 | offsetX += space.advanceWidth * style.wordSpacing; | 191 | offsetX += space.advanceWidth * style.wordSpacing; |
189 | continue; | 192 | continue; |
@@ -201,7 +204,9 @@ class RichText extends Widget { | @@ -201,7 +204,9 @@ class RichText extends Widget { | ||
201 | offsetX - space.advanceWidth * style.wordSpacing, | 204 | offsetX - space.advanceWidth * style.wordSpacing, |
202 | false, | 205 | false, |
203 | bottom)); | 206 | bottom)); |
207 | + | ||
204 | lineStart += wCount; | 208 | lineStart += wCount; |
209 | + | ||
205 | if (maxLines != null && ++lines > maxLines) { | 210 | if (maxLines != null && ++lines > maxLines) { |
206 | break; | 211 | break; |
207 | } | 212 | } |
@@ -229,6 +234,38 @@ class RichText extends Widget { | @@ -229,6 +234,38 @@ class RichText extends Widget { | ||
229 | metrics.advanceWidth + space.advanceWidth * style.wordSpacing; | 234 | metrics.advanceWidth + space.advanceWidth * style.wordSpacing; |
230 | } | 235 | } |
231 | 236 | ||
237 | + if (softWrap && line < spanLines.length - 1) { | ||
238 | + width = math.max( | ||
239 | + width, | ||
240 | + _realignLine( | ||
241 | + _words.sublist(lineStart), | ||
242 | + constraintWidth, | ||
243 | + offsetX - space.advanceWidth * style.wordSpacing, | ||
244 | + false, | ||
245 | + bottom)); | ||
246 | + | ||
247 | + lineStart += wCount; | ||
248 | + | ||
249 | + if (maxLines != null && ++lines > maxLines) { | ||
250 | + break; | ||
251 | + } | ||
252 | + | ||
253 | + offsetX = 0.0; | ||
254 | + if (wCount > 0) { | ||
255 | + offsetY += bottom - top + style.lineSpacing; | ||
256 | + } else { | ||
257 | + offsetY += space.ascent + space.descent + style.lineSpacing; | ||
258 | + } | ||
259 | + top = null; | ||
260 | + bottom = null; | ||
261 | + | ||
262 | + if (offsetY > constraintHeight) { | ||
263 | + return false; | ||
264 | + } | ||
265 | + wCount = 0; | ||
266 | + } | ||
267 | + } | ||
268 | + | ||
232 | offsetX -= space.advanceWidth * style.wordSpacing; | 269 | offsetX -= space.advanceWidth * style.wordSpacing; |
233 | return true; | 270 | return true; |
234 | }, defaultstyle); | 271 | }, defaultstyle); |
-
Please register or login to post a comment