@@ -346,16 +346,20 @@ class MarkdownBuilder implements md.NodeVisitor {
346346 child = builders[_blocks.last.tag! ]!
347347 .visitText (text, styleSheet.styles[_blocks.last.tag! ]);
348348 } else if (_blocks.last.tag == 'pre' ) {
349- final ScrollController preScrollController = ScrollController ();
350- child = Scrollbar (
351- controller: preScrollController,
352- child: SingleChildScrollView (
353- controller: preScrollController,
354- scrollDirection: Axis .horizontal,
355- padding: styleSheet.codeblockPadding,
356- child: _buildRichText (delegate.formatText (styleSheet, text.text)),
357- ),
358- );
349+ child = _ScrollControllerBuilder (
350+ builder: (BuildContext context, ScrollController preScrollController,
351+ Widget ? child) {
352+ return Scrollbar (
353+ controller: preScrollController,
354+ child: SingleChildScrollView (
355+ controller: preScrollController,
356+ scrollDirection: Axis .horizontal,
357+ padding: styleSheet.codeblockPadding,
358+ child: child,
359+ ),
360+ );
361+ },
362+ child: _buildRichText (delegate.formatText (styleSheet, text.text)));
359363 } else {
360364 child = _buildRichText (
361365 TextSpan (
@@ -448,15 +452,20 @@ class MarkdownBuilder implements md.NodeVisitor {
448452 }
449453 } else if (tag == 'table' ) {
450454 if (styleSheet.tableColumnWidth is FixedColumnWidth ) {
451- final ScrollController tableScrollController = ScrollController ();
452- child = Scrollbar (
453- controller: tableScrollController,
454- child: SingleChildScrollView (
455- controller: tableScrollController,
456- scrollDirection: Axis .horizontal,
457- padding: styleSheet.tablePadding,
458- child: _buildTable (),
459- ),
455+ child = _ScrollControllerBuilder (
456+ builder: (BuildContext context,
457+ ScrollController tableScrollController, Widget ? child) {
458+ return Scrollbar (
459+ controller: tableScrollController,
460+ child: SingleChildScrollView (
461+ controller: tableScrollController,
462+ scrollDirection: Axis .horizontal,
463+ padding: styleSheet.tablePadding,
464+ child: child,
465+ ),
466+ );
467+ },
468+ child: _buildTable (),
460469 );
461470 } else {
462471 child = _buildTable ();
@@ -1017,3 +1026,33 @@ class MarkdownBuilder implements md.NodeVisitor {
10171026 }
10181027 }
10191028}
1029+
1030+ class _ScrollControllerBuilder extends StatefulWidget {
1031+ const _ScrollControllerBuilder ({
1032+ required this .builder,
1033+ this .child,
1034+ });
1035+
1036+ final ValueWidgetBuilder <ScrollController > builder;
1037+
1038+ final Widget ? child;
1039+
1040+ @override
1041+ State <_ScrollControllerBuilder > createState () =>
1042+ _ScrollControllerBuilderState ();
1043+ }
1044+
1045+ class _ScrollControllerBuilderState extends State <_ScrollControllerBuilder > {
1046+ final ScrollController _controller = ScrollController ();
1047+
1048+ @override
1049+ void dispose () {
1050+ _controller.dispose ();
1051+ super .dispose ();
1052+ }
1053+
1054+ @override
1055+ Widget build (BuildContext context) {
1056+ return widget.builder (context, _controller, widget.child);
1057+ }
1058+ }
0 commit comments