11import 'dart:collection' ;
22import 'dart:math' ;
33
4+ import 'package:collection/collection.dart' ;
45import 'package:csslib/parser.dart' as cssparser;
56import 'package:csslib/visitor.dart' as css;
67import 'package:flutter/gestures.dart' ;
@@ -324,7 +325,22 @@ class HtmlParser extends StatelessWidget {
324325 newContext: newContext,
325326 style: tree.style,
326327 shrinkWrap: context.parser.shrinkWrap,
327- children: tree.children.map ((tree) => parseTree (newContext, tree)).toList (),
328+ children: tree.children
329+ .expandIndexed ((i, childTree) => [
330+ if (shrinkWrap &&
331+ childTree.style.display == Display .BLOCK &&
332+ i > 0 &&
333+ tree.children[i - 1 ] is ReplacedElement )
334+ TextSpan (text: "\n " ),
335+ parseTree (newContext, childTree),
336+ if (shrinkWrap &&
337+ i != tree.children.length - 1 &&
338+ childTree.style.display == Display .BLOCK &&
339+ childTree.element? .localName != "html" &&
340+ childTree.element? .localName != "body" )
341+ TextSpan (text: "\n " ),
342+ ])
343+ .toList (),
328344 ),
329345 );
330346 } else if (tree.style.display == Display .LIST_ITEM ) {
@@ -458,21 +474,26 @@ class HtmlParser extends StatelessWidget {
458474 child: StyledText (
459475 textSpan: TextSpan (
460476 style: newContext.style.generateTextStyle (),
461- children: tree.children
462- .map ((tree) => parseTree (newContext, tree))
463- .toList (),
477+ children: tree.children.map ((tree) => parseTree (newContext, tree)).toList (),
464478 ),
465479 style: newContext.style,
466- renderContext: context ,
480+ renderContext: newContext ,
467481 ),
468482 ),
469483 );
470484 } else {
471485 ///[tree] is an inline element.
472486 return TextSpan (
473487 style: newContext.style.generateTextStyle (),
474- children:
475- tree.children.map ((tree) => parseTree (newContext, tree)).toList (),
488+ children: tree.children
489+ .expand ((tree) => [
490+ parseTree (newContext, tree),
491+ if (tree.style.display == Display .BLOCK &&
492+ tree.element? .localName != "html" &&
493+ tree.element? .localName != "body" )
494+ TextSpan (text: "\n " ),
495+ ])
496+ .toList (),
476497 );
477498 }
478499 }
@@ -861,7 +882,7 @@ class StyledText extends StatelessWidget {
861882 @override
862883 Widget build (BuildContext context) {
863884 return SizedBox (
864- width: calculateWidth (style.display, renderContext),
885+ width: consumeExpandedBlock (style.display, renderContext),
865886 child: Text .rich (
866887 textSpan,
867888 style: style.generateTextStyle (),
@@ -874,13 +895,10 @@ class StyledText extends StatelessWidget {
874895 );
875896 }
876897
877- double ? calculateWidth (Display ? display, RenderContext context) {
898+ double ? consumeExpandedBlock (Display ? display, RenderContext context) {
878899 if ((display == Display .BLOCK || display == Display .LIST_ITEM ) && ! renderContext.parser.shrinkWrap) {
879900 return double .infinity;
880901 }
881- if (renderContext.parser.shrinkWrap) {
882- return MediaQuery .of (context.buildContext).size.width;
883- }
884902 return null ;
885903 }
886904}
0 commit comments