saminsohag

dart formate

  1 +## 1.0.11
  2 +
  3 +* dart format.
  4 +
1 ## 1.0.10 5 ## 1.0.10
2 6
3 * pubspec flutter version updated. 7 * pubspec flutter version updated.
@@ -16,30 +16,29 @@ class _CodeFieldState extends State<CodeField> { @@ -16,30 +16,29 @@ class _CodeFieldState extends State<CodeField> {
16 Widget build(BuildContext context) { 16 Widget build(BuildContext context) {
17 return Material( 17 return Material(
18 color: Theme.of(context).colorScheme.onInverseSurface, 18 color: Theme.of(context).colorScheme.onInverseSurface,
19 - shape: RoundedRectangleBorder(  
20 - borderRadius: BorderRadius.circular(8),  
21 - ), 19 + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
22 child: Column( 20 child: Column(
23 crossAxisAlignment: CrossAxisAlignment.stretch, 21 crossAxisAlignment: CrossAxisAlignment.stretch,
24 children: [ 22 children: [
25 Row( 23 Row(
26 children: [ 24 children: [
27 Padding( 25 Padding(
28 - padding:  
29 - const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), 26 + padding: const EdgeInsets.symmetric(
  27 + horizontal: 16.0,
  28 + vertical: 8,
  29 + ),
30 child: Text(widget.name), 30 child: Text(widget.name),
31 ), 31 ),
32 const Spacer(), 32 const Spacer(),
33 TextButton.icon( 33 TextButton.icon(
34 style: TextButton.styleFrom( 34 style: TextButton.styleFrom(
35 foregroundColor: Theme.of(context).colorScheme.onSurface, 35 foregroundColor: Theme.of(context).colorScheme.onSurface,
36 - textStyle: const TextStyle(  
37 - fontWeight: FontWeight.normal,  
38 - ), 36 + textStyle: const TextStyle(fontWeight: FontWeight.normal),
39 ), 37 ),
40 onPressed: () async { 38 onPressed: () async {
41 - await Clipboard.setData(ClipboardData(text: widget.codes))  
42 - .then((value) { 39 + await Clipboard.setData(
  40 + ClipboardData(text: widget.codes),
  41 + ).then((value) {
43 setState(() { 42 setState(() {
44 _copied = true; 43 _copied = true;
45 }); 44 });
@@ -57,15 +56,11 @@ class _CodeFieldState extends State<CodeField> { @@ -57,15 +56,11 @@ class _CodeFieldState extends State<CodeField> {
57 ), 56 ),
58 ], 57 ],
59 ), 58 ),
60 - const Divider(  
61 - height: 1,  
62 - ), 59 + const Divider(height: 1),
63 SingleChildScrollView( 60 SingleChildScrollView(
64 scrollDirection: Axis.horizontal, 61 scrollDirection: Axis.horizontal,
65 padding: const EdgeInsets.all(16), 62 padding: const EdgeInsets.all(16),
66 - child: Text(  
67 - widget.codes,  
68 - ), 63 + child: Text(widget.codes),
69 ), 64 ),
70 ], 65 ],
71 ), 66 ),
@@ -16,7 +16,9 @@ class CustomDivider extends LeafRenderObjectWidget { @@ -16,7 +16,9 @@ class CustomDivider extends LeafRenderObjectWidget {
16 16
17 @override 17 @override
18 void updateRenderObject( 18 void updateRenderObject(
19 - BuildContext context, covariant RenderDivider renderObject) { 19 + BuildContext context,
  20 + covariant RenderDivider renderObject,
  21 + ) {
20 renderObject.color = color ?? Theme.of(context).colorScheme.outline; 22 renderObject.color = color ?? Theme.of(context).colorScheme.outline;
21 renderObject.height = height ?? 2; 23 renderObject.height = height ?? 2;
22 renderObject.width = MediaQuery.sizeOf(context).width; 24 renderObject.width = MediaQuery.sizeOf(context).width;
@@ -57,9 +59,10 @@ class RenderDivider extends RenderBox { @@ -57,9 +59,10 @@ class RenderDivider extends RenderBox {
57 59
58 @override 60 @override
59 Size computeDryLayout(BoxConstraints constraints) { 61 Size computeDryLayout(BoxConstraints constraints) {
60 - return BoxConstraints.tightFor(width: null, height: _height)  
61 - .enforce(constraints)  
62 - .smallest; 62 + return BoxConstraints.tightFor(
  63 + width: null,
  64 + height: _height,
  65 + ).enforce(constraints).smallest;
63 } 66 }
64 67
65 @override 68 @override
@@ -69,7 +72,9 @@ class RenderDivider extends RenderBox { @@ -69,7 +72,9 @@ class RenderDivider extends RenderBox {
69 72
70 @override 73 @override
71 void paint(PaintingContext context, Offset offset) { 74 void paint(PaintingContext context, Offset offset) {
72 - context.canvas.drawRect(offset & Size(Rect.largest.size.width, _height),  
73 - Paint()..color = _color); 75 + context.canvas.drawRect(
  76 + offset & Size(Rect.largest.size.width, _height),
  77 + Paint()..color = _color,
  78 + );
74 } 79 }
75 } 80 }
@@ -25,8 +25,11 @@ class CustomImageError extends LeafRenderObjectWidget { @@ -25,8 +25,11 @@ class CustomImageError extends LeafRenderObjectWidget {
25 25
26 @override 26 @override
27 void updateRenderObject( 27 void updateRenderObject(
28 - BuildContext context, covariant RenderCustomImageError renderObject) {  
29 - renderObject._backgroundColor = backgroundColor ?? 28 + BuildContext context,
  29 + covariant RenderCustomImageError renderObject,
  30 + ) {
  31 + renderObject._backgroundColor =
  32 + backgroundColor ??
30 Theme.of(context).colorScheme.surfaceContainerHighest; 33 Theme.of(context).colorScheme.surfaceContainerHighest;
31 renderObject._iconColor = 34 renderObject._iconColor =
32 iconColor ?? Theme.of(context).colorScheme.onSurfaceVariant; 35 iconColor ?? Theme.of(context).colorScheme.onSurfaceVariant;
@@ -37,7 +40,10 @@ class CustomImageError extends LeafRenderObjectWidget { @@ -37,7 +40,10 @@ class CustomImageError extends LeafRenderObjectWidget {
37 40
38 class RenderCustomImageError extends RenderProxyBox { 41 class RenderCustomImageError extends RenderProxyBox {
39 RenderCustomImageError( 42 RenderCustomImageError(
40 - this._iconColor, this._backgroundColor, this._outlineColor); 43 + this._iconColor,
  44 + this._backgroundColor,
  45 + this._outlineColor,
  46 + );
41 Color _iconColor; 47 Color _iconColor;
42 Color _outlineColor; 48 Color _outlineColor;
43 Color _backgroundColor; 49 Color _backgroundColor;
@@ -68,29 +74,29 @@ class RenderCustomImageError extends RenderProxyBox { @@ -68,29 +74,29 @@ class RenderCustomImageError extends RenderProxyBox {
68 @override 74 @override
69 void performLayout() { 75 void performLayout() {
70 if (constraints.hasBoundedHeight && constraints.hasBoundedWidth) { 76 if (constraints.hasBoundedHeight && constraints.hasBoundedWidth) {
71 - size = constraints.constrain(Size( 77 + size = constraints.constrain(
  78 + Size(
72 min(constraints.maxWidth, constraints.maxHeight), 79 min(constraints.maxWidth, constraints.maxHeight),
73 - min(constraints.maxHeight, constraints.maxWidth))); 80 + min(constraints.maxHeight, constraints.maxWidth),
  81 + ),
  82 + );
74 return; 83 return;
75 } 84 }
76 if (constraints.hasBoundedHeight || constraints.hasBoundedWidth) { 85 if (constraints.hasBoundedHeight || constraints.hasBoundedWidth) {
77 - size = constraints.constrain(Size( 86 + size = constraints.constrain(
  87 + Size(
78 min(constraints.maxHeight, constraints.maxWidth), 88 min(constraints.maxHeight, constraints.maxWidth),
79 min(constraints.maxHeight, constraints.maxWidth), 89 min(constraints.maxHeight, constraints.maxWidth),
80 - )); 90 + ),
  91 + );
81 return; 92 return;
82 } 93 }
83 - size = constraints.constrain(  
84 - const Size(80, 80),  
85 - ); 94 + size = constraints.constrain(const Size(80, 80));
86 } 95 }
87 96
88 @override 97 @override
89 void paint(PaintingContext context, Offset offset) { 98 void paint(PaintingContext context, Offset offset) {
90 - context.canvas.drawRect(  
91 - offset & size,  
92 - Paint()..color = _backgroundColor,  
93 - ); 99 + context.canvas.drawRect(offset & size, Paint()..color = _backgroundColor);
94 context.canvas.drawRect( 100 context.canvas.drawRect(
95 offset & size, 101 offset & size,
96 Paint() 102 Paint()
@@ -104,14 +110,17 @@ class RenderCustomImageError extends RenderProxyBox { @@ -104,14 +110,17 @@ class RenderCustomImageError extends RenderProxyBox {
104 style: TextStyle( 110 style: TextStyle(
105 fontSize: min(min(size.width, size.height), 35), 111 fontSize: min(min(size.width, size.height), 35),
106 fontFamily: icon.fontFamily, 112 fontFamily: icon.fontFamily,
107 - color: _iconColor), 113 + color: _iconColor,
  114 + ),
108 ); 115 );
109 textPainter.layout(); 116 textPainter.layout();
110 textPainter.paint( 117 textPainter.paint(
111 context.canvas, 118 context.canvas,
112 offset + 119 offset +
113 - Offset(size.width / 2 - textPainter.size.width / 2,  
114 - size.height / 2 - textPainter.size.height / 2), 120 + Offset(
  121 + size.width / 2 - textPainter.size.width / 2,
  122 + size.height / 2 - textPainter.size.height / 2,
  123 + ),
115 ); 124 );
116 } 125 }
117 } 126 }
@@ -141,8 +150,11 @@ class CustomImageLoading extends LeafRenderObjectWidget { @@ -141,8 +150,11 @@ class CustomImageLoading extends LeafRenderObjectWidget {
141 150
142 @override 151 @override
143 void updateRenderObject( 152 void updateRenderObject(
144 - BuildContext context, covariant RenderCustomImageLoading renderObject) {  
145 - renderObject._backgroundColor = backgroundColor ?? 153 + BuildContext context,
  154 + covariant RenderCustomImageLoading renderObject,
  155 + ) {
  156 + renderObject._backgroundColor =
  157 + backgroundColor ??
146 Theme.of(context).colorScheme.surfaceContainerHighest; 158 Theme.of(context).colorScheme.surfaceContainerHighest;
147 renderObject._iconColor = 159 renderObject._iconColor =
148 iconColor ?? Theme.of(context).colorScheme.onSurfaceVariant; 160 iconColor ?? Theme.of(context).colorScheme.onSurfaceVariant;
@@ -153,8 +165,12 @@ class CustomImageLoading extends LeafRenderObjectWidget { @@ -153,8 +165,12 @@ class CustomImageLoading extends LeafRenderObjectWidget {
153 } 165 }
154 166
155 class RenderCustomImageLoading extends RenderProxyBox { 167 class RenderCustomImageLoading extends RenderProxyBox {
156 - RenderCustomImageLoading(this._iconColor, this._backgroundColor,  
157 - this._outlineColor, this._progress); 168 + RenderCustomImageLoading(
  169 + this._iconColor,
  170 + this._backgroundColor,
  171 + this._outlineColor,
  172 + this._progress,
  173 + );
158 Color _iconColor; 174 Color _iconColor;
159 Color _outlineColor; 175 Color _outlineColor;
160 Color _backgroundColor; 176 Color _backgroundColor;
@@ -194,29 +210,29 @@ class RenderCustomImageLoading extends RenderProxyBox { @@ -194,29 +210,29 @@ class RenderCustomImageLoading extends RenderProxyBox {
194 @override 210 @override
195 void performLayout() { 211 void performLayout() {
196 if (constraints.hasBoundedHeight && constraints.hasBoundedWidth) { 212 if (constraints.hasBoundedHeight && constraints.hasBoundedWidth) {
197 - size = constraints.constrain(Size( 213 + size = constraints.constrain(
  214 + Size(
198 min(constraints.maxWidth, constraints.maxHeight), 215 min(constraints.maxWidth, constraints.maxHeight),
199 - min(constraints.maxHeight, constraints.maxWidth))); 216 + min(constraints.maxHeight, constraints.maxWidth),
  217 + ),
  218 + );
200 return; 219 return;
201 } 220 }
202 if (constraints.hasBoundedHeight || constraints.hasBoundedWidth) { 221 if (constraints.hasBoundedHeight || constraints.hasBoundedWidth) {
203 - size = constraints.constrain(Size( 222 + size = constraints.constrain(
  223 + Size(
204 min(constraints.maxHeight, constraints.maxWidth), 224 min(constraints.maxHeight, constraints.maxWidth),
205 min(constraints.maxHeight, constraints.maxWidth), 225 min(constraints.maxHeight, constraints.maxWidth),
206 - )); 226 + ),
  227 + );
207 return; 228 return;
208 } 229 }
209 - size = constraints.constrain(  
210 - const Size(80, 80),  
211 - ); 230 + size = constraints.constrain(const Size(80, 80));
212 } 231 }
213 232
214 @override 233 @override
215 void paint(PaintingContext context, Offset offset) { 234 void paint(PaintingContext context, Offset offset) {
216 - context.canvas.drawRect(  
217 - offset & size,  
218 - Paint()..color = _backgroundColor,  
219 - ); 235 + context.canvas.drawRect(offset & size, Paint()..color = _backgroundColor);
220 context.canvas.drawRect( 236 context.canvas.drawRect(
221 offset & size, 237 offset & size,
222 Paint() 238 Paint()
@@ -230,17 +246,21 @@ class RenderCustomImageLoading extends RenderProxyBox { @@ -230,17 +246,21 @@ class RenderCustomImageLoading extends RenderProxyBox {
230 style: TextStyle( 246 style: TextStyle(
231 fontSize: min(min(size.width, size.height), 35), 247 fontSize: min(min(size.width, size.height), 35),
232 fontFamily: icon.fontFamily, 248 fontFamily: icon.fontFamily,
233 - color: _iconColor), 249 + color: _iconColor,
  250 + ),
234 ); 251 );
235 textPainter.layout(); 252 textPainter.layout();
236 context.canvas.drawRect( 253 context.canvas.drawRect(
237 (offset + Offset(0, size.height - 5)) & Size(size.width * _progress, 5), 254 (offset + Offset(0, size.height - 5)) & Size(size.width * _progress, 5),
238 - Paint()..color = _iconColor); 255 + Paint()..color = _iconColor,
  256 + );
239 textPainter.paint( 257 textPainter.paint(
240 context.canvas, 258 context.canvas,
241 offset + 259 offset +
242 - Offset(size.width / 2 - textPainter.size.width / 2,  
243 - size.height / 2 - textPainter.size.height / 2), 260 + Offset(
  261 + size.width / 2 - textPainter.size.width / 2,
  262 + size.height / 2 - textPainter.size.height / 2,
  263 + ),
244 ); 264 );
245 } 265 }
246 } 266 }
@@ -25,8 +25,10 @@ class CustomRb extends StatelessWidget { @@ -25,8 +25,10 @@ class CustomRb extends StatelessWidget {
25 WidgetSpan( 25 WidgetSpan(
26 alignment: PlaceholderAlignment.middle, 26 alignment: PlaceholderAlignment.middle,
27 child: Padding( 27 child: Padding(
28 - padding:  
29 - EdgeInsetsDirectional.only(start: spacing, end: spacing), 28 + padding: EdgeInsetsDirectional.only(
  29 + start: spacing,
  30 + end: spacing,
  31 + ),
30 child: Radio( 32 child: Radio(
31 value: value, 33 value: value,
32 groupValue: true, 34 groupValue: true,
@@ -36,9 +38,7 @@ class CustomRb extends StatelessWidget { @@ -36,9 +38,7 @@ class CustomRb extends StatelessWidget {
36 ), 38 ),
37 ), 39 ),
38 ), 40 ),
39 - Expanded(  
40 - child: child,  
41 - ) 41 + Expanded(child: child),
42 ], 42 ],
43 ), 43 ),
44 ); 44 );
@@ -70,15 +70,15 @@ class CustomCb extends StatelessWidget { @@ -70,15 +70,15 @@ class CustomCb extends StatelessWidget {
70 WidgetSpan( 70 WidgetSpan(
71 alignment: PlaceholderAlignment.middle, 71 alignment: PlaceholderAlignment.middle,
72 child: Padding( 72 child: Padding(
73 - padding:  
74 - EdgeInsetsDirectional.only(start: spacing, end: spacing), 73 + padding: EdgeInsetsDirectional.only(
  74 + start: spacing,
  75 + end: spacing,
  76 + ),
75 child: Checkbox(value: value, onChanged: (value) {}), 77 child: Checkbox(value: value, onChanged: (value) {}),
76 ), 78 ),
77 ), 79 ),
78 ), 80 ),
79 - Expanded(  
80 - child: child,  
81 - ) 81 + Expanded(child: child),
82 ], 82 ],
83 ), 83 ),
84 ); 84 );
@@ -11,15 +11,16 @@ class LinkButton extends StatefulWidget { @@ -11,15 +11,16 @@ class LinkButton extends StatefulWidget {
11 final Color color; 11 final Color color;
12 final Color hoverColor; 12 final Color hoverColor;
13 13
14 - const LinkButton(  
15 - {super.key, 14 + const LinkButton({
  15 + super.key,
16 required this.text, 16 required this.text,
17 required this.config, 17 required this.config,
18 required this.color, 18 required this.color,
19 required this.hoverColor, 19 required this.hoverColor,
20 this.onPressed, 20 this.onPressed,
21 this.textStyle, 21 this.textStyle,
22 - this.url}); 22 + this.url,
  23 + });
23 24
24 @override 25 @override
25 State<LinkButton> createState() => _LinkButtonState(); 26 State<LinkButton> createState() => _LinkButtonState();
@@ -44,12 +45,7 @@ class _LinkButtonState extends State<LinkButton> { @@ -44,12 +45,7 @@ class _LinkButtonState extends State<LinkButton> {
44 onTapUp: (_) => _handlePress(false), 45 onTapUp: (_) => _handlePress(false),
45 onTapCancel: () => _handlePress(false), 46 onTapCancel: () => _handlePress(false),
46 onTap: widget.onPressed, 47 onTap: widget.onPressed,
47 - child: widget.config.getRich(  
48 - TextSpan(  
49 - text: widget.text,  
50 - style: style,  
51 - ),  
52 - ), 48 + child: widget.config.getRich(TextSpan(text: widget.text, style: style)),
53 ), 49 ),
54 ); 50 );
55 } 51 }
@@ -24,20 +24,36 @@ class GptMarkdownConfig { @@ -24,20 +24,36 @@ class GptMarkdownConfig {
24 final void Function(String url, String title)? onLinkTab; 24 final void Function(String url, String title)? onLinkTab;
25 final String Function(String tex)? latexWorkaround; 25 final String Function(String tex)? latexWorkaround;
26 final Widget Function( 26 final Widget Function(
27 - BuildContext context, String tex, TextStyle textStyle, bool inline)? 27 + BuildContext context,
  28 + String tex,
  29 + TextStyle textStyle,
  30 + bool inline,
  31 + )?
28 latexBuilder; 32 latexBuilder;
29 final Widget Function( 33 final Widget Function(
30 - BuildContext context, String content, TextStyle textStyle)? 34 + BuildContext context,
  35 + String content,
  36 + TextStyle textStyle,
  37 + )?
31 sourceTagBuilder; 38 sourceTagBuilder;
32 final bool followLinkColor; 39 final bool followLinkColor;
33 final Widget Function( 40 final Widget Function(
34 - BuildContext context, String name, String code, bool closed)? codeBuilder; 41 + BuildContext context,
  42 + String name,
  43 + String code,
  44 + bool closed,
  45 + )?
  46 + codeBuilder;
35 final int? maxLines; 47 final int? maxLines;
36 final TextOverflow? overflow; 48 final TextOverflow? overflow;
37 final Widget Function(BuildContext context, String text, TextStyle style)? 49 final Widget Function(BuildContext context, String text, TextStyle style)?
38 highlightBuilder; 50 highlightBuilder;
39 final Widget Function( 51 final Widget Function(
40 - BuildContext context, String text, String url, TextStyle style)? 52 + BuildContext context,
  53 + String text,
  54 + String url,
  55 + TextStyle style,
  56 + )?
41 linkBuilder; 57 linkBuilder;
42 58
43 GptMarkdownConfig copyWith({ 59 GptMarkdownConfig copyWith({
@@ -48,21 +64,36 @@ class GptMarkdownConfig { @@ -48,21 +64,36 @@ class GptMarkdownConfig {
48 final TextScaler? textScaler, 64 final TextScaler? textScaler,
49 final String Function(String tex)? latexWorkaround, 65 final String Function(String tex)? latexWorkaround,
50 final Widget Function( 66 final Widget Function(
51 - BuildContext context, String tex, TextStyle textStyle, bool inline)? 67 + BuildContext context,
  68 + String tex,
  69 + TextStyle textStyle,
  70 + bool inline,
  71 + )?
52 latexBuilder, 72 latexBuilder,
53 final Widget Function( 73 final Widget Function(
54 - BuildContext context, String content, TextStyle textStyle)? 74 + BuildContext context,
  75 + String content,
  76 + TextStyle textStyle,
  77 + )?
55 sourceTagBuilder, 78 sourceTagBuilder,
56 bool? followLinkColor, 79 bool? followLinkColor,
57 final Widget Function( 80 final Widget Function(
58 - BuildContext context, String name, String code, bool closed)? 81 + BuildContext context,
  82 + String name,
  83 + String code,
  84 + bool closed,
  85 + )?
59 codeBuilder, 86 codeBuilder,
60 final int? maxLines, 87 final int? maxLines,
61 final TextOverflow? overflow, 88 final TextOverflow? overflow,
62 final Widget Function(BuildContext context, String text, TextStyle style)? 89 final Widget Function(BuildContext context, String text, TextStyle style)?
63 highlightBuilder, 90 highlightBuilder,
64 final Widget Function( 91 final Widget Function(
65 - BuildContext context, String text, String url, TextStyle style)? 92 + BuildContext context,
  93 + String text,
  94 + String url,
  95 + TextStyle style,
  96 + )?
66 linkBuilder, 97 linkBuilder,
67 }) { 98 }) {
68 return GptMarkdownConfig( 99 return GptMarkdownConfig(
@@ -2,8 +2,11 @@ import 'package:flutter/material.dart'; @@ -2,8 +2,11 @@ import 'package:flutter/material.dart';
2 import 'package:flutter/rendering.dart'; 2 import 'package:flutter/rendering.dart';
3 3
4 class SelectableAdapter extends StatelessWidget { 4 class SelectableAdapter extends StatelessWidget {
5 - const SelectableAdapter(  
6 - {super.key, required this.child, required this.selectedText}); 5 + const SelectableAdapter({
  6 + super.key,
  7 + required this.child,
  8 + required this.selectedText,
  9 + });
7 10
8 final Widget child; 11 final Widget child;
9 final String selectedText; 12 final String selectedText;
@@ -17,17 +20,20 @@ class SelectableAdapter extends StatelessWidget { @@ -17,17 +20,20 @@ class SelectableAdapter extends StatelessWidget {
17 return MouseRegion( 20 return MouseRegion(
18 cursor: SystemMouseCursors.text, 21 cursor: SystemMouseCursors.text,
19 child: _SelectableAdapter( 22 child: _SelectableAdapter(
20 - registrar: registrar, selectedText: selectedText, child: child), 23 + registrar: registrar,
  24 + selectedText: selectedText,
  25 + child: child,
  26 + ),
21 ); 27 );
22 } 28 }
23 } 29 }
24 30
25 class _SelectableAdapter extends SingleChildRenderObjectWidget { 31 class _SelectableAdapter extends SingleChildRenderObjectWidget {
26 - const _SelectableAdapter(  
27 - {required this.registrar, 32 + const _SelectableAdapter({
  33 + required this.registrar,
28 required Widget child, 34 required Widget child,
29 - required this.selectedText})  
30 - : super(child: child); 35 + required this.selectedText,
  36 + }) : super(child: child);
31 37
32 final SelectionRegistrar registrar; 38 final SelectionRegistrar registrar;
33 final String selectedText; 39 final String selectedText;
@@ -36,12 +42,15 @@ class _SelectableAdapter extends SingleChildRenderObjectWidget { @@ -36,12 +42,15 @@ class _SelectableAdapter extends SingleChildRenderObjectWidget {
36 return _RenderSelectableAdapter( 42 return _RenderSelectableAdapter(
37 DefaultSelectionStyle.of(context).selectionColor!, 43 DefaultSelectionStyle.of(context).selectionColor!,
38 registrar, 44 registrar,
39 - selectedText); 45 + selectedText,
  46 + );
40 } 47 }
41 48
42 @override 49 @override
43 void updateRenderObject( 50 void updateRenderObject(
44 - BuildContext context, _RenderSelectableAdapter renderObject) { 51 + BuildContext context,
  52 + _RenderSelectableAdapter renderObject,
  53 + ) {
45 renderObject 54 renderObject
46 ..selectionColor = DefaultSelectionStyle.of(context).selectionColor! 55 ..selectionColor = DefaultSelectionStyle.of(context).selectionColor!
47 ..registrar = registrar; 56 ..registrar = registrar;
@@ -51,8 +60,10 @@ class _SelectableAdapter extends SingleChildRenderObjectWidget { @@ -51,8 +60,10 @@ class _SelectableAdapter extends SingleChildRenderObjectWidget {
51 class _RenderSelectableAdapter extends RenderProxyBox 60 class _RenderSelectableAdapter extends RenderProxyBox
52 with Selectable, SelectionRegistrant { 61 with Selectable, SelectionRegistrant {
53 _RenderSelectableAdapter( 62 _RenderSelectableAdapter(
54 - Color selectionColor, SelectionRegistrar registrar, this.selectedText)  
55 - : _selectionColor = selectionColor, 63 + Color selectionColor,
  64 + SelectionRegistrar registrar,
  65 + this.selectedText,
  66 + ) : _selectionColor = selectionColor,
56 _geometry = ValueNotifier<SelectionGeometry>(_noSelection) { 67 _geometry = ValueNotifier<SelectionGeometry>(_noSelection) {
57 this.registrar = registrar; 68 this.registrar = registrar;
58 _geometry.addListener(markNeedsPaint); 69 _geometry.addListener(markNeedsPaint);
@@ -152,13 +163,20 @@ class _RenderSelectableAdapter extends RenderProxyBox @@ -152,13 +163,20 @@ class _RenderSelectableAdapter extends RenderProxyBox
152 switch (event.type) { 163 switch (event.type) {
153 case SelectionEventType.startEdgeUpdate: 164 case SelectionEventType.startEdgeUpdate:
154 case SelectionEventType.endEdgeUpdate: 165 case SelectionEventType.endEdgeUpdate:
155 - final Rect renderObjectRect =  
156 - Rect.fromLTWH(0, 0, size.width, size.height); 166 + final Rect renderObjectRect = Rect.fromLTWH(
  167 + 0,
  168 + 0,
  169 + size.width,
  170 + size.height,
  171 + );
157 // Normalize offset in case it is out side of the rect. 172 // Normalize offset in case it is out side of the rect.
158 - final Offset point =  
159 - globalToLocal((event as SelectionEdgeUpdateEvent).globalPosition);  
160 - final Offset adjustedPoint =  
161 - SelectionUtils.adjustDragOffset(renderObjectRect, point); 173 + final Offset point = globalToLocal(
  174 + (event as SelectionEdgeUpdateEvent).globalPosition,
  175 + );
  176 + final Offset adjustedPoint = SelectionUtils.adjustDragOffset(
  177 + renderObjectRect,
  178 + point,
  179 + );
162 if (event.type == SelectionEventType.startEdgeUpdate) { 180 if (event.type == SelectionEventType.startEdgeUpdate) {
163 _start = adjustedPoint; 181 _start = adjustedPoint;
164 } else { 182 } else {
@@ -189,14 +207,16 @@ class _RenderSelectableAdapter extends RenderProxyBox @@ -189,14 +207,16 @@ class _RenderSelectableAdapter extends RenderProxyBox
189 extendSelectionEvent.forward ? Offset.infinite : Offset.zero; 207 extendSelectionEvent.forward ? Offset.infinite : Offset.zero;
190 if (extendSelectionEvent.isEnd) { 208 if (extendSelectionEvent.isEnd) {
191 if (newOffset == _end) { 209 if (newOffset == _end) {
192 - result = extendSelectionEvent.forward 210 + result =
  211 + extendSelectionEvent.forward
193 ? SelectionResult.next 212 ? SelectionResult.next
194 : SelectionResult.previous; 213 : SelectionResult.previous;
195 } 214 }
196 _end = newOffset; 215 _end = newOffset;
197 } else { 216 } else {
198 if (newOffset == _start) { 217 if (newOffset == _start) {
199 - result = extendSelectionEvent.forward 218 + result =
  219 + extendSelectionEvent.forward
200 ? SelectionResult.next 220 ? SelectionResult.next
201 : SelectionResult.previous; 221 : SelectionResult.previous;
202 } 222 }
@@ -296,18 +316,22 @@ class _RenderSelectableAdapter extends RenderProxyBox @@ -296,18 +316,22 @@ class _RenderSelectableAdapter extends RenderProxyBox
296 return; 316 return;
297 } 317 }
298 // Draw the selection highlight. 318 // Draw the selection highlight.
299 - final Paint selectionPaint = Paint() 319 + final Paint selectionPaint =
  320 + Paint()
300 ..style = PaintingStyle.fill 321 ..style = PaintingStyle.fill
301 ..color = _selectionColor; 322 ..color = _selectionColor;
302 - context.canvas  
303 - .drawRect(_getSelectionHighlightRect().shift(offset), selectionPaint); 323 + context.canvas.drawRect(
  324 + _getSelectionHighlightRect().shift(offset),
  325 + selectionPaint,
  326 + );
304 327
305 // Push the layer links if any. 328 // Push the layer links if any.
306 if (_startHandle != null) { 329 if (_startHandle != null) {
307 context.pushLayer( 330 context.pushLayer(
308 LeaderLayer( 331 LeaderLayer(
309 link: _startHandle!, 332 link: _startHandle!,
310 - offset: offset + value.startSelectionPoint!.localPosition), 333 + offset: offset + value.startSelectionPoint!.localPosition,
  334 + ),
311 (PaintingContext context, Offset offset) {}, 335 (PaintingContext context, Offset offset) {},
312 Offset.zero, 336 Offset.zero,
313 ); 337 );
@@ -316,7 +340,8 @@ class _RenderSelectableAdapter extends RenderProxyBox @@ -316,7 +340,8 @@ class _RenderSelectableAdapter extends RenderProxyBox
316 context.pushLayer( 340 context.pushLayer(
317 LeaderLayer( 341 LeaderLayer(
318 link: _endHandle!, 342 link: _endHandle!,
319 - offset: offset + value.endSelectionPoint!.localPosition), 343 + offset: offset + value.endSelectionPoint!.localPosition,
  344 + ),
320 (PaintingContext context, Offset offset) {}, 345 (PaintingContext context, Offset offset) {},
321 Offset.zero, 346 Offset.zero,
322 ); 347 );
@@ -26,16 +26,16 @@ class UnorderedListView extends StatelessWidget { @@ -26,16 +26,16 @@ class UnorderedListView extends StatelessWidget {
26 crossAxisAlignment: CrossAxisAlignment.baseline, 26 crossAxisAlignment: CrossAxisAlignment.baseline,
27 children: [ 27 children: [
28 if (bulletSize == 0) 28 if (bulletSize == 0)
29 - SizedBox(  
30 - width: spacing + padding,  
31 - ) 29 + SizedBox(width: spacing + padding)
32 else 30 else
33 Text.rich( 31 Text.rich(
34 WidgetSpan( 32 WidgetSpan(
35 alignment: PlaceholderAlignment.middle, 33 alignment: PlaceholderAlignment.middle,
36 child: Padding( 34 child: Padding(
37 - padding:  
38 - EdgeInsetsDirectional.only(start: padding, end: spacing), 35 + padding: EdgeInsetsDirectional.only(
  36 + start: padding,
  37 + end: spacing,
  38 + ),
39 child: Container( 39 child: Container(
40 width: bulletSize, 40 width: bulletSize,
41 height: bulletSize, 41 height: bulletSize,
@@ -47,9 +47,7 @@ class UnorderedListView extends StatelessWidget { @@ -47,9 +47,7 @@ class UnorderedListView extends StatelessWidget {
47 ), 47 ),
48 ), 48 ),
49 ), 49 ),
50 - Expanded(  
51 - child: child,  
52 - ) 50 + Expanded(child: child),
53 ], 51 ],
54 ), 52 ),
55 ); 53 );
@@ -60,15 +58,15 @@ class OrderedListView extends StatelessWidget { @@ -60,15 +58,15 @@ class OrderedListView extends StatelessWidget {
60 final String no; 58 final String no;
61 final double spacing; 59 final double spacing;
62 final double padding; 60 final double padding;
63 - const OrderedListView(  
64 - {super.key, 61 + const OrderedListView({
  62 + super.key,
65 this.spacing = 6, 63 this.spacing = 6,
66 this.padding = 6, 64 this.padding = 6,
67 TextStyle? style, 65 TextStyle? style,
68 required this.child, 66 required this.child,
69 this.textDirection = TextDirection.ltr, 67 this.textDirection = TextDirection.ltr,
70 - required this.no})  
71 - : _style = style; 68 + required this.no,
  69 + }) : _style = style;
72 final TextStyle? _style; 70 final TextStyle? _style;
73 final TextDirection textDirection; 71 final TextDirection textDirection;
74 final Widget child; 72 final Widget child;
@@ -83,16 +81,9 @@ class OrderedListView extends StatelessWidget { @@ -83,16 +81,9 @@ class OrderedListView extends StatelessWidget {
83 children: [ 81 children: [
84 Padding( 82 Padding(
85 padding: EdgeInsetsDirectional.only(start: padding, end: spacing), 83 padding: EdgeInsetsDirectional.only(start: padding, end: spacing),
86 - child: Text.rich(  
87 - TextSpan(  
88 - text: no,  
89 - ),  
90 - style: _style,  
91 - ), 84 + child: Text.rich(TextSpan(text: no), style: _style),
92 ), 85 ),
93 - Expanded(  
94 - child: child,  
95 - ) 86 + Expanded(child: child),
96 ], 87 ],
97 ), 88 ),
98 ); 89 );
@@ -48,44 +48,52 @@ class GptMarkdown extends StatelessWidget { @@ -48,44 +48,52 @@ class GptMarkdown extends StatelessWidget {
48 final int? maxLines; 48 final int? maxLines;
49 final TextOverflow? overflow; 49 final TextOverflow? overflow;
50 final Widget Function( 50 final Widget Function(
51 - BuildContext context, String tex, TextStyle style, bool inline)? 51 + BuildContext context,
  52 + String tex,
  53 + TextStyle style,
  54 + bool inline,
  55 + )?
52 latexBuilder; 56 latexBuilder;
53 final bool followLinkColor; 57 final bool followLinkColor;
54 final Widget Function( 58 final Widget Function(
55 - BuildContext context, String name, String code, bool closed)? codeBuilder; 59 + BuildContext context,
  60 + String name,
  61 + String code,
  62 + bool closed,
  63 + )?
  64 + codeBuilder;
56 final Widget Function(BuildContext, String, TextStyle)? sourceTagBuilder; 65 final Widget Function(BuildContext, String, TextStyle)? sourceTagBuilder;
57 final Widget Function(BuildContext context, String text, TextStyle style)? 66 final Widget Function(BuildContext context, String text, TextStyle style)?
58 highlightBuilder; 67 highlightBuilder;
59 final Widget Function( 68 final Widget Function(
60 - BuildContext context, String text, String url, TextStyle style)? 69 + BuildContext context,
  70 + String text,
  71 + String url,
  72 + TextStyle style,
  73 + )?
61 linkBuilder; 74 linkBuilder;
62 String _removeExtraLinesInsideBlockLatex(String text) { 75 String _removeExtraLinesInsideBlockLatex(String text) {
63 return text.replaceAllMapped( 76 return text.replaceAllMapped(
64 - RegExp(  
65 - r"\\\[(.*?)\\\]",  
66 - multiLine: true,  
67 - dotAll: true,  
68 - ), (match) { 77 + RegExp(r"\\\[(.*?)\\\]", multiLine: true, dotAll: true),
  78 + (match) {
69 String content = match[0] ?? ""; 79 String content = match[0] ?? "";
70 return content.replaceAllMapped(RegExp(r"\n[\n\ ]+"), (match) => "\n"); 80 return content.replaceAllMapped(RegExp(r"\n[\n\ ]+"), (match) => "\n");
71 - }); 81 + },
  82 + );
72 } 83 }
73 84
74 @override 85 @override
75 Widget build(BuildContext context) { 86 Widget build(BuildContext context) {
76 String tex = data.trim(); 87 String tex = data.trim();
77 tex = tex.replaceAllMapped( 88 tex = tex.replaceAllMapped(
78 - RegExp(  
79 - r"(?<!\\)\$\$(.*?)(?<!\\)\$\$",  
80 - dotAll: true,  
81 - ),  
82 - (match) => "\\[${match[1] ?? ""}\\]"); 89 + RegExp(r"(?<!\\)\$\$(.*?)(?<!\\)\$\$", dotAll: true),
  90 + (match) => "\\[${match[1] ?? ""}\\]",
  91 + );
83 if (!tex.contains(r"\(")) { 92 if (!tex.contains(r"\(")) {
84 tex = tex.replaceAllMapped( 93 tex = tex.replaceAllMapped(
85 - RegExp(  
86 - r"(?<!\\)\$(.*?)(?<!\\)\$",  
87 - ),  
88 - (match) => "\\(${match[1] ?? ""}\\)"); 94 + RegExp(r"(?<!\\)\$(.*?)(?<!\\)\$"),
  95 + (match) => "\\(${match[1] ?? ""}\\)",
  96 + );
89 tex = tex.splitMapJoin( 97 tex = tex.splitMapJoin(
90 RegExp(r"\[.*?\]|\(.*?\)"), 98 RegExp(r"\[.*?\]|\(.*?\)"),
91 onNonMatch: (p0) { 99 onNonMatch: (p0) {
@@ -113,6 +121,7 @@ class GptMarkdown extends StatelessWidget { @@ -113,6 +121,7 @@ class GptMarkdown extends StatelessWidget {
113 highlightBuilder: highlightBuilder, 121 highlightBuilder: highlightBuilder,
114 linkBuilder: linkBuilder, 122 linkBuilder: linkBuilder,
115 ), 123 ),
116 - )); 124 + ),
  125 + );
117 } 126 }
118 } 127 }
@@ -46,11 +46,7 @@ abstract class MarkdownComponent { @@ -46,11 +46,7 @@ abstract class MarkdownComponent {
46 for (var each in components) { 46 for (var each in components) {
47 if (each.exp.hasMatch(element)) { 47 if (each.exp.hasMatch(element)) {
48 if (each.inline) { 48 if (each.inline) {
49 - spans.add(each.span(  
50 - context,  
51 - element,  
52 - config,  
53 - )); 49 + spans.add(each.span(context, element, config));
54 } else { 50 } else {
55 spans.addAll([ 51 spans.addAll([
56 TextSpan( 52 TextSpan(
@@ -61,11 +57,7 @@ abstract class MarkdownComponent { @@ -61,11 +57,7 @@ abstract class MarkdownComponent {
61 color: config.style?.color, 57 color: config.style?.color,
62 ), 58 ),
63 ), 59 ),
64 - each.span(  
65 - context,  
66 - element,  
67 - config,  
68 - ), 60 + each.span(context, element, config),
69 TextSpan( 61 TextSpan(
70 text: "\n ", 62 text: "\n ",
71 style: TextStyle( 63 style: TextStyle(
@@ -82,12 +74,7 @@ abstract class MarkdownComponent { @@ -82,12 +74,7 @@ abstract class MarkdownComponent {
82 return ""; 74 return "";
83 }, 75 },
84 onNonMatch: (p0) { 76 onNonMatch: (p0) {
85 - spans.add(  
86 - TextSpan(  
87 - text: p0,  
88 - style: config.style,  
89 - ),  
90 - ); 77 + spans.add(TextSpan(text: p0, style: config.style));
91 return ""; 78 return "";
92 }, 79 },
93 ); 80 );
@@ -124,11 +111,7 @@ abstract class BlockMd extends MarkdownComponent { @@ -124,11 +111,7 @@ abstract class BlockMd extends MarkdownComponent {
124 bool get inline => false; 111 bool get inline => false;
125 112
126 @override 113 @override
127 - RegExp get exp => RegExp(  
128 - r'^\ *?' + expString,  
129 - dotAll: true,  
130 - multiLine: true,  
131 - ); 114 + RegExp get exp => RegExp(r'^\ *?' + expString, dotAll: true, multiLine: true);
132 115
133 String get expString; 116 String get expString;
134 117
@@ -141,22 +124,12 @@ abstract class BlockMd extends MarkdownComponent { @@ -141,22 +124,12 @@ abstract class BlockMd extends MarkdownComponent {
141 var matches = RegExp(r'^(?<spaces>\ \ +).*').firstMatch(text); 124 var matches = RegExp(r'^(?<spaces>\ \ +).*').firstMatch(text);
142 var spaces = matches?.namedGroup('spaces'); 125 var spaces = matches?.namedGroup('spaces');
143 var length = spaces?.length ?? 0; 126 var length = spaces?.length ?? 0;
144 - var child = build(  
145 - context,  
146 - text,  
147 - config,  
148 - ); 127 + var child = build(context, text, config);
149 length = min(length, 4); 128 length = min(length, 4);
150 if (length > 0) { 129 if (length > 0) {
151 - child = UnorderedListView(  
152 - spacing: length * 6.0,  
153 - child: child,  
154 - ); 130 + child = UnorderedListView(spacing: length * 6.0, child: child);
155 } 131 }
156 - return WidgetSpan(  
157 - child: child,  
158 - alignment: PlaceholderAlignment.middle,  
159 - ); 132 + return WidgetSpan(child: child, alignment: PlaceholderAlignment.middle);
160 } 133 }
161 134
162 Widget build( 135 Widget build(
@@ -186,10 +159,7 @@ class HTag extends BlockMd { @@ -186,10 +159,7 @@ class HTag extends BlockMd {
186 theme.h4, 159 theme.h4,
187 theme.h5, 160 theme.h5,
188 theme.h6, 161 theme.h6,
189 - ][match![1]!.length - 1]  
190 - ?.copyWith(  
191 - color: config.style?.color,  
192 - ), 162 + ][match![1]!.length - 1]?.copyWith(color: config.style?.color),
193 ); 163 );
194 return config.getRich( 164 return config.getRich(
195 TextSpan( 165 TextSpan(
@@ -207,7 +177,8 @@ class HTag extends BlockMd { @@ -207,7 +177,8 @@ class HTag extends BlockMd {
207 WidgetSpan( 177 WidgetSpan(
208 child: CustomDivider( 178 child: CustomDivider(
209 height: theme.hrLineThickness, 179 height: theme.hrLineThickness,
210 - color: config.style?.color ?? 180 + color:
  181 + config.style?.color ??
211 Theme.of(context).colorScheme.outline, 182 Theme.of(context).colorScheme.outline,
212 ), 183 ),
213 ), 184 ),
@@ -229,10 +200,7 @@ class NewLines extends InlineMd { @@ -229,10 +200,7 @@ class NewLines extends InlineMd {
229 ) { 200 ) {
230 return TextSpan( 201 return TextSpan(
231 text: "\n\n\n\n", 202 text: "\n\n\n\n",
232 - style: TextStyle(  
233 - fontSize: 6,  
234 - color: config.style?.color,  
235 - ), 203 + style: TextStyle(fontSize: 6, color: config.style?.color),
236 ); 204 );
237 } 205 }
238 } 206 }
@@ -272,10 +240,7 @@ class CheckBoxMd extends BlockMd { @@ -272,10 +240,7 @@ class CheckBoxMd extends BlockMd {
272 return CustomCb( 240 return CustomCb(
273 value: ("${match?[1]}" == "x"), 241 value: ("${match?[1]}" == "x"),
274 textDirection: config.textDirection, 242 textDirection: config.textDirection,
275 - child: MdWidget(  
276 - "${match?[2]}",  
277 - config: config,  
278 - ), 243 + child: MdWidget("${match?[2]}", config: config),
279 ); 244 );
280 } 245 }
281 } 246 }
@@ -296,10 +261,7 @@ class RadioButtonMd extends BlockMd { @@ -296,10 +261,7 @@ class RadioButtonMd extends BlockMd {
296 return CustomRb( 261 return CustomRb(
297 value: ("${match?[1]}" == "x"), 262 value: ("${match?[1]}" == "x"),
298 textDirection: config.textDirection, 263 textDirection: config.textDirection,
299 - child: MdWidget(  
300 - "${match?[2]}",  
301 - config: config,  
302 - ), 264 + child: MdWidget("${match?[2]}", config: config),
303 ); 265 );
304 } 266 }
305 } 267 }
@@ -324,11 +286,7 @@ class IndentMd extends InlineMd { @@ -324,11 +286,7 @@ class IndentMd extends InlineMd {
324 // data = data.replaceAll(RegExp(r'\n\ {' '$spaces' '}'), '\n').trim(); 286 // data = data.replaceAll(RegExp(r'\n\ {' '$spaces' '}'), '\n').trim();
325 data = data.trim(); 287 data = data.trim();
326 var child = TextSpan( 288 var child = TextSpan(
327 - children: MarkdownComponent.generate(  
328 - context,  
329 - data,  
330 - config,  
331 - ), 289 + children: MarkdownComponent.generate(context, data, config),
332 ); 290 );
333 return TextSpan( 291 return TextSpan(
334 children: [ 292 children: [
@@ -370,15 +328,13 @@ class UnOrderedList extends BlockMd { @@ -370,15 +328,13 @@ class UnOrderedList extends BlockMd {
370 (config.style?.color ?? DefaultTextStyle.of(context).style.color), 328 (config.style?.color ?? DefaultTextStyle.of(context).style.color),
371 padding: 7, 329 padding: 7,
372 spacing: 10, 330 spacing: 10,
373 - bulletSize: 0.3 * 331 + bulletSize:
  332 + 0.3 *
374 (config.style?.fontSize ?? 333 (config.style?.fontSize ??
375 DefaultTextStyle.of(context).style.fontSize ?? 334 DefaultTextStyle.of(context).style.fontSize ??
376 kDefaultFontSize), 335 kDefaultFontSize),
377 textDirection: config.textDirection, 336 textDirection: config.textDirection,
378 - child: MdWidget(  
379 - "${match?[1]?.trim()}",  
380 - config: config,  
381 - ), 337 + child: MdWidget("${match?[1]?.trim()}", config: config),
382 ); 338 );
383 } 339 }
384 } 340 }
@@ -398,12 +354,10 @@ class OrderedList extends BlockMd { @@ -398,12 +354,10 @@ class OrderedList extends BlockMd {
398 return OrderedListView( 354 return OrderedListView(
399 no: "${match?[1]}", 355 no: "${match?[1]}",
400 textDirection: config.textDirection, 356 textDirection: config.textDirection,
401 - style: (config.style ?? const TextStyle())  
402 - .copyWith(fontWeight: FontWeight.w100),  
403 - child: MdWidget(  
404 - "${match?[2]?.trim()}",  
405 - config: config, 357 + style: (config.style ?? const TextStyle()).copyWith(
  358 + fontWeight: FontWeight.w100,
406 ), 359 ),
  360 + child: MdWidget("${match?[2]?.trim()}", config: config),
407 ); 361 );
408 } 362 }
409 } 363 }
@@ -432,25 +386,25 @@ class HighlightedText extends InlineMd { @@ -432,25 +386,25 @@ class HighlightedText extends InlineMd {
432 ); 386 );
433 } 387 }
434 388
435 - var style = config.style?.copyWith( 389 + var style =
  390 + config.style?.copyWith(
436 fontWeight: FontWeight.bold, 391 fontWeight: FontWeight.bold,
437 - background: Paint() 392 + background:
  393 + Paint()
438 ..color = GptMarkdownTheme.of(context).highlightColor 394 ..color = GptMarkdownTheme.of(context).highlightColor
439 ..strokeCap = StrokeCap.round 395 ..strokeCap = StrokeCap.round
440 ..strokeJoin = StrokeJoin.round, 396 ..strokeJoin = StrokeJoin.round,
441 ) ?? 397 ) ??
442 TextStyle( 398 TextStyle(
443 fontWeight: FontWeight.bold, 399 fontWeight: FontWeight.bold,
444 - background: Paint() 400 + background:
  401 + Paint()
445 ..color = GptMarkdownTheme.of(context).highlightColor 402 ..color = GptMarkdownTheme.of(context).highlightColor
446 ..strokeCap = StrokeCap.round 403 ..strokeCap = StrokeCap.round
447 ..strokeJoin = StrokeJoin.round, 404 ..strokeJoin = StrokeJoin.round,
448 ); 405 );
449 406
450 - return TextSpan(  
451 - text: highlightedText,  
452 - style: style,  
453 - ); 407 + return TextSpan(text: highlightedText, style: style);
454 } 408 }
455 } 409 }
456 410
@@ -467,14 +421,12 @@ class BoldMd extends InlineMd { @@ -467,14 +421,12 @@ class BoldMd extends InlineMd {
467 ) { 421 ) {
468 var match = exp.firstMatch(text.trim()); 422 var match = exp.firstMatch(text.trim());
469 var conf = config.copyWith( 423 var conf = config.copyWith(
470 - style: config.style?.copyWith(fontWeight: FontWeight.bold) ??  
471 - const TextStyle(fontWeight: FontWeight.bold)); 424 + style:
  425 + config.style?.copyWith(fontWeight: FontWeight.bold) ??
  426 + const TextStyle(fontWeight: FontWeight.bold),
  427 + );
472 return TextSpan( 428 return TextSpan(
473 - children: MarkdownComponent.generate(  
474 - context,  
475 - "${match?[1]}",  
476 - conf,  
477 - ), 429 + children: MarkdownComponent.generate(context, "${match?[1]}", conf),
478 style: conf.style, 430 style: conf.style,
479 ); 431 );
480 } 432 }
@@ -492,19 +444,15 @@ class StrikeMd extends InlineMd { @@ -492,19 +444,15 @@ class StrikeMd extends InlineMd {
492 ) { 444 ) {
493 var match = exp.firstMatch(text.trim()); 445 var match = exp.firstMatch(text.trim());
494 var conf = config.copyWith( 446 var conf = config.copyWith(
495 - style: config.style?.copyWith( 447 + style:
  448 + config.style?.copyWith(
496 decoration: TextDecoration.lineThrough, 449 decoration: TextDecoration.lineThrough,
497 decorationColor: config.style?.color, 450 decorationColor: config.style?.color,
498 ) ?? 451 ) ??
499 - const TextStyle(  
500 - decoration: TextDecoration.lineThrough,  
501 - )); 452 + const TextStyle(decoration: TextDecoration.lineThrough),
  453 + );
502 return TextSpan( 454 return TextSpan(
503 - children: MarkdownComponent.generate(  
504 - context,  
505 - "${match?[1]}",  
506 - conf,  
507 - ), 455 + children: MarkdownComponent.generate(context, "${match?[1]}", conf),
508 style: conf.style, 456 style: conf.style,
509 ); 457 );
510 } 458 }
@@ -513,9 +461,10 @@ class StrikeMd extends InlineMd { @@ -513,9 +461,10 @@ class StrikeMd extends InlineMd {
513 /// Italic text component 461 /// Italic text component
514 class ItalicMd extends InlineMd { 462 class ItalicMd extends InlineMd {
515 @override 463 @override
516 - RegExp get exp =>  
517 - RegExp(r"(?<!\*)\*(?<!\s)(.+?)(?<!\s)\*(?!\*)|\_(?<!\s)(.+?)(?<!\s)\_",  
518 - dotAll: true); 464 + RegExp get exp => RegExp(
  465 + r"(?<!\*)\*(?<!\s)(.+?)(?<!\s)\*(?!\*)|\_(?<!\s)(.+?)(?<!\s)\_",
  466 + dotAll: true,
  467 + );
519 468
520 @override 469 @override
521 InlineSpan span( 470 InlineSpan span(
@@ -526,14 +475,12 @@ class ItalicMd extends InlineMd { @@ -526,14 +475,12 @@ class ItalicMd extends InlineMd {
526 var match = exp.firstMatch(text.trim()); 475 var match = exp.firstMatch(text.trim());
527 var data = match?[1] ?? match?[2]; 476 var data = match?[1] ?? match?[2];
528 var conf = config.copyWith( 477 var conf = config.copyWith(
529 - style: (config.style ?? const TextStyle())  
530 - .copyWith(fontStyle: FontStyle.italic));  
531 - return TextSpan(  
532 - children: MarkdownComponent.generate(  
533 - context,  
534 - "$data",  
535 - conf, 478 + style: (config.style ?? const TextStyle()).copyWith(
  479 + fontStyle: FontStyle.italic,
536 ), 480 ),
  481 + );
  482 + return TextSpan(
  483 + children: MarkdownComponent.generate(context, "$data", conf),
537 style: conf.style, 484 style: conf.style,
538 ); 485 );
539 } 486 }
@@ -555,7 +502,8 @@ class LatexMathMultiLine extends BlockMd { @@ -555,7 +502,8 @@ class LatexMathMultiLine extends BlockMd {
555 String mathText = p0?[1] ?? p0?[2] ?? ""; 502 String mathText = p0?[1] ?? p0?[2] ?? "";
556 var workaround = config.latexWorkaround ?? (String tex) => tex; 503 var workaround = config.latexWorkaround ?? (String tex) => tex;
557 504
558 - var builder = config.latexBuilder ?? 505 + var builder =
  506 + config.latexBuilder ??
559 (BuildContext context, String tex, TextStyle textStyle, bool inline) => 507 (BuildContext context, String tex, TextStyle textStyle, bool inline) =>
560 SelectableAdapter( 508 SelectableAdapter(
561 selectedText: tex, 509 selectedText: tex,
@@ -564,14 +512,14 @@ class LatexMathMultiLine extends BlockMd { @@ -564,14 +512,14 @@ class LatexMathMultiLine extends BlockMd {
564 textStyle: textStyle, 512 textStyle: textStyle,
565 mathStyle: MathStyle.display, 513 mathStyle: MathStyle.display,
566 textScaleFactor: 1, 514 textScaleFactor: 1,
567 - settings: const TexParserSettings(  
568 - strict: Strict.ignore,  
569 - ), 515 + settings: const TexParserSettings(strict: Strict.ignore),
570 options: MathOptions( 516 options: MathOptions(
571 sizeUnderTextStyle: MathSize.large, 517 sizeUnderTextStyle: MathSize.large,
572 - color: config.style?.color ?? 518 + color:
  519 + config.style?.color ??
573 Theme.of(context).colorScheme.onSurface, 520 Theme.of(context).colorScheme.onSurface,
574 - fontSize: config.style?.fontSize ?? 521 + fontSize:
  522 + config.style?.fontSize ??
575 Theme.of(context).textTheme.bodyMedium?.fontSize, 523 Theme.of(context).textTheme.bodyMedium?.fontSize,
576 mathFontOptions: FontOptions( 524 mathFontOptions: FontOptions(
577 fontFamily: "Main", 525 fontFamily: "Main",
@@ -590,15 +538,21 @@ class LatexMathMultiLine extends BlockMd { @@ -590,15 +538,21 @@ class LatexMathMultiLine extends BlockMd {
590 workaround(mathText), 538 workaround(mathText),
591 textDirection: config.textDirection, 539 textDirection: config.textDirection,
592 style: textStyle.copyWith( 540 style: textStyle.copyWith(
593 - color: (!kDebugMode) 541 + color:
  542 + (!kDebugMode)
594 ? null 543 ? null
595 - : Theme.of(context).colorScheme.error), 544 + : Theme.of(context).colorScheme.error,
  545 + ),
596 ); 546 );
597 }, 547 },
598 ), 548 ),
599 ); 549 );
600 - return builder(context, workaround(mathText),  
601 - config.style ?? const TextStyle(), false); 550 + return builder(
  551 + context,
  552 + workaround(mathText),
  553 + config.style ?? const TextStyle(),
  554 + false,
  555 + );
602 } 556 }
603 } 557 }
604 558
@@ -623,7 +577,8 @@ class LatexMath extends InlineMd { @@ -623,7 +577,8 @@ class LatexMath extends InlineMd {
623 p0?.group(0); 577 p0?.group(0);
624 String mathText = p0?[1]?.toString() ?? ""; 578 String mathText = p0?[1]?.toString() ?? "";
625 var workaround = config.latexWorkaround ?? (String tex) => tex; 579 var workaround = config.latexWorkaround ?? (String tex) => tex;
626 - var builder = config.latexBuilder ?? 580 + var builder =
  581 + config.latexBuilder ??
627 (BuildContext context, String tex, TextStyle textStyle, bool inline) => 582 (BuildContext context, String tex, TextStyle textStyle, bool inline) =>
628 SelectableAdapter( 583 SelectableAdapter(
629 selectedText: tex, 584 selectedText: tex,
@@ -632,14 +587,14 @@ class LatexMath extends InlineMd { @@ -632,14 +587,14 @@ class LatexMath extends InlineMd {
632 textStyle: textStyle, 587 textStyle: textStyle,
633 mathStyle: MathStyle.display, 588 mathStyle: MathStyle.display,
634 textScaleFactor: 1, 589 textScaleFactor: 1,
635 - settings: const TexParserSettings(  
636 - strict: Strict.ignore,  
637 - ), 590 + settings: const TexParserSettings(strict: Strict.ignore),
638 options: MathOptions( 591 options: MathOptions(
639 sizeUnderTextStyle: MathSize.large, 592 sizeUnderTextStyle: MathSize.large,
640 - color: config.style?.color ?? 593 + color:
  594 + config.style?.color ??
641 Theme.of(context).colorScheme.onSurface, 595 Theme.of(context).colorScheme.onSurface,
642 - fontSize: config.style?.fontSize ?? 596 + fontSize:
  597 + config.style?.fontSize ??
643 Theme.of(context).textTheme.bodyMedium?.fontSize, 598 Theme.of(context).textTheme.bodyMedium?.fontSize,
644 mathFontOptions: FontOptions( 599 mathFontOptions: FontOptions(
645 fontFamily: "Main", 600 fontFamily: "Main",
@@ -658,9 +613,11 @@ class LatexMath extends InlineMd { @@ -658,9 +613,11 @@ class LatexMath extends InlineMd {
658 workaround(mathText), 613 workaround(mathText),
659 textDirection: config.textDirection, 614 textDirection: config.textDirection,
660 style: textStyle.copyWith( 615 style: textStyle.copyWith(
661 - color: (!kDebugMode) 616 + color:
  617 + (!kDebugMode)
662 ? null 618 ? null
663 - : Theme.of(context).colorScheme.error), 619 + : Theme.of(context).colorScheme.error,
  620 + ),
664 ); 621 );
665 }, 622 },
666 ), 623 ),
@@ -668,8 +625,12 @@ class LatexMath extends InlineMd { @@ -668,8 +625,12 @@ class LatexMath extends InlineMd {
668 return WidgetSpan( 625 return WidgetSpan(
669 alignment: PlaceholderAlignment.baseline, 626 alignment: PlaceholderAlignment.baseline,
670 baseline: TextBaseline.alphabetic, 627 baseline: TextBaseline.alphabetic,
671 - child: builder(context, workaround(mathText),  
672 - config.style ?? const TextStyle(), true), 628 + child: builder(
  629 + context,
  630 + workaround(mathText),
  631 + config.style ?? const TextStyle(),
  632 + true,
  633 + ),
673 ); 634 );
674 } 635 }
675 } 636 }
@@ -694,8 +655,12 @@ class SourceTag extends InlineMd { @@ -694,8 +655,12 @@ class SourceTag extends InlineMd {
694 alignment: PlaceholderAlignment.middle, 655 alignment: PlaceholderAlignment.middle,
695 child: Padding( 656 child: Padding(
696 padding: const EdgeInsets.all(2), 657 padding: const EdgeInsets.all(2),
697 - child: config.sourceTagBuilder  
698 - ?.call(context, content, const TextStyle()) ?? 658 + child:
  659 + config.sourceTagBuilder?.call(
  660 + context,
  661 + content,
  662 + const TextStyle(),
  663 + ) ??
699 SizedBox( 664 SizedBox(
700 width: 20, 665 width: 20,
701 height: 20, 666 height: 20,
@@ -784,8 +749,9 @@ class ImageMd extends InlineMd { @@ -784,8 +749,9 @@ class ImageMd extends InlineMd {
784 double? height; 749 double? height;
785 double? width; 750 double? width;
786 if (match?[1] != null) { 751 if (match?[1] != null) {
787 - var size = RegExp(r"^([0-9]+)?x?([0-9]+)?")  
788 - .firstMatch(match![1].toString().trim()); 752 + var size = RegExp(
  753 + r"^([0-9]+)?x?([0-9]+)?",
  754 + ).firstMatch(match![1].toString().trim());
789 width = double.tryParse(size?[1]?.toString().trim() ?? 'a'); 755 width = double.tryParse(size?[1]?.toString().trim() ?? 'a');
790 height = double.tryParse(size?[2]?.toString().trim() ?? 'a'); 756 height = double.tryParse(size?[2]?.toString().trim() ?? 'a');
791 } 757 }
@@ -795,16 +761,18 @@ class ImageMd extends InlineMd { @@ -795,16 +761,18 @@ class ImageMd extends InlineMd {
795 width: width, 761 width: width,
796 height: height, 762 height: height,
797 child: Image( 763 child: Image(
798 - image: NetworkImage(  
799 - "${match?[2]}",  
800 - ),  
801 - loadingBuilder: (BuildContext context, Widget child,  
802 - ImageChunkEvent? loadingProgress) { 764 + image: NetworkImage("${match?[2]}"),
  765 + loadingBuilder: (
  766 + BuildContext context,
  767 + Widget child,
  768 + ImageChunkEvent? loadingProgress,
  769 + ) {
803 if (loadingProgress == null) { 770 if (loadingProgress == null) {
804 return child; 771 return child;
805 } 772 }
806 return CustomImageLoading( 773 return CustomImageLoading(
807 - progress: loadingProgress.expectedTotalBytes != null 774 + progress:
  775 + loadingProgress.expectedTotalBytes != null
808 ? loadingProgress.cumulativeBytesLoaded / 776 ? loadingProgress.cumulativeBytesLoaded /
809 loadingProgress.expectedTotalBytes! 777 loadingProgress.expectedTotalBytes!
810 : 1, 778 : 1,
@@ -831,10 +799,12 @@ class TableMd extends BlockMd { @@ -831,10 +799,12 @@ class TableMd extends BlockMd {
831 String text, 799 String text,
832 final GptMarkdownConfig config, 800 final GptMarkdownConfig config,
833 ) { 801 ) {
834 - final List<Map<int, String>> value = text 802 + final List<Map<int, String>> value =
  803 + text
835 .split('\n') 804 .split('\n')
836 .map<Map<int, String>>( 805 .map<Map<int, String>>(
837 - (e) => e 806 + (e) =>
  807 + e
838 .split('|') 808 .split('|')
839 .where((element) => element.isNotEmpty) 809 .where((element) => element.isNotEmpty)
840 .toList() 810 .toList()
@@ -868,23 +838,24 @@ class TableMd extends BlockMd { @@ -868,23 +838,24 @@ class TableMd extends BlockMd {
868 width: 1, 838 width: 1,
869 color: Theme.of(context).colorScheme.onSurface, 839 color: Theme.of(context).colorScheme.onSurface,
870 ), 840 ),
871 - children: value 841 + children:
  842 + value
872 .asMap() 843 .asMap()
873 .entries 844 .entries
874 .map<TableRow>( 845 .map<TableRow>(
875 (entry) => TableRow( 846 (entry) => TableRow(
876 - decoration: (heading) 847 + decoration:
  848 + (heading)
877 ? BoxDecoration( 849 ? BoxDecoration(
878 - color: (entry.key == 0)  
879 - ? Theme.of(context)  
880 - .colorScheme  
881 - .surfaceContainerHighest 850 + color:
  851 + (entry.key == 0)
  852 + ? Theme.of(
  853 + context,
  854 + ).colorScheme.surfaceContainerHighest
882 : null, 855 : null,
883 ) 856 )
884 : null, 857 : null,
885 - children: List.generate(  
886 - maxCol,  
887 - (index) { 858 + children: List.generate(maxCol, (index) {
888 var e = entry.value; 859 var e = entry.value;
889 String data = e[index] ?? ""; 860 String data = e[index] ?? "";
890 if (RegExp(r"^--+$").hasMatch(data.trim()) || 861 if (RegExp(r"^--+$").hasMatch(data.trim()) ||
@@ -895,15 +866,16 @@ class TableMd extends BlockMd { @@ -895,15 +866,16 @@ class TableMd extends BlockMd {
895 return Center( 866 return Center(
896 child: Padding( 867 child: Padding(
897 padding: const EdgeInsets.symmetric( 868 padding: const EdgeInsets.symmetric(
898 - horizontal: 8, vertical: 4), 869 + horizontal: 8,
  870 + vertical: 4,
  871 + ),
899 child: MdWidget( 872 child: MdWidget(
900 (e[index] ?? "").trim(), 873 (e[index] ?? "").trim(),
901 config: config, 874 config: config,
902 ), 875 ),
903 ), 876 ),
904 ); 877 );
905 - },  
906 - ), 878 + }),
907 ), 879 ),
908 ) 880 )
909 .toList(), 881 .toList(),
@@ -2,11 +2,7 @@ part of 'gpt_markdown.dart'; @@ -2,11 +2,7 @@ part of 'gpt_markdown.dart';
2 2
3 /// It creates a markdown widget closed to each other. 3 /// It creates a markdown widget closed to each other.
4 class MdWidget extends StatelessWidget { 4 class MdWidget extends StatelessWidget {
5 - const MdWidget(  
6 - this.exp, {  
7 - super.key,  
8 - required this.config,  
9 - }); 5 + const MdWidget(this.exp, {super.key, required this.config});
10 final String exp; 6 final String exp;
11 final GptMarkdownConfig config; 7 final GptMarkdownConfig config;
12 8
@@ -31,10 +27,7 @@ class MdWidget extends StatelessWidget { @@ -31,10 +27,7 @@ class MdWidget extends StatelessWidget {
31 ), 27 ),
32 ); 28 );
33 return config.getRich( 29 return config.getRich(
34 - TextSpan(  
35 - children: list,  
36 - style: config.style?.copyWith(),  
37 - ), 30 + TextSpan(children: list, style: config.style?.copyWith()),
38 ); 31 );
39 } 32 }
40 } 33 }
@@ -39,8 +39,9 @@ class GptMarkdownThemeData extends ThemeExtension<GptMarkdownThemeData> { @@ -39,8 +39,9 @@ class GptMarkdownThemeData extends ThemeExtension<GptMarkdownThemeData> {
39 displayMedium: Typography.tall2021.displayMedium?.copyWith(inherit: true), 39 displayMedium: Typography.tall2021.displayMedium?.copyWith(inherit: true),
40 displaySmall: Typography.tall2021.displaySmall?.copyWith(inherit: true), 40 displaySmall: Typography.tall2021.displaySmall?.copyWith(inherit: true),
41 headlineLarge: Typography.tall2021.headlineLarge?.copyWith(inherit: true), 41 headlineLarge: Typography.tall2021.headlineLarge?.copyWith(inherit: true),
42 - headlineMedium:  
43 - Typography.tall2021.headlineMedium?.copyWith(inherit: true), 42 + headlineMedium: Typography.tall2021.headlineMedium?.copyWith(
  43 + inherit: true,
  44 + ),
44 headlineSmall: Typography.tall2021.headlineSmall?.copyWith(inherit: true), 45 headlineSmall: Typography.tall2021.headlineSmall?.copyWith(inherit: true),
45 titleLarge: Typography.tall2021.titleLarge?.copyWith(inherit: true), 46 titleLarge: Typography.tall2021.titleLarge?.copyWith(inherit: true),
46 titleMedium: Typography.tall2021.titleMedium?.copyWith(inherit: true), 47 titleMedium: Typography.tall2021.titleMedium?.copyWith(inherit: true),
@@ -52,9 +53,7 @@ class GptMarkdownThemeData extends ThemeExtension<GptMarkdownThemeData> { @@ -52,9 +53,7 @@ class GptMarkdownThemeData extends ThemeExtension<GptMarkdownThemeData> {
52 labelMedium: Typography.tall2021.labelMedium?.copyWith(inherit: true), 53 labelMedium: Typography.tall2021.labelMedium?.copyWith(inherit: true),
53 labelSmall: Typography.tall2021.labelSmall?.copyWith(inherit: true), 54 labelSmall: Typography.tall2021.labelSmall?.copyWith(inherit: true),
54 ); 55 );
55 - themeData = themeData.copyWith(  
56 - textTheme: typography,  
57 - ); 56 + themeData = themeData.copyWith(textTheme: typography);
58 TextTheme textTheme = themeData.textTheme; 57 TextTheme textTheme = themeData.textTheme;
59 return GptMarkdownThemeData._fromTheme(themeData, textTheme).copyWith( 58 return GptMarkdownThemeData._fromTheme(themeData, textTheme).copyWith(
60 highlightColor: highlightColor, 59 highlightColor: highlightColor,
@@ -72,7 +71,9 @@ class GptMarkdownThemeData extends ThemeExtension<GptMarkdownThemeData> { @@ -72,7 +71,9 @@ class GptMarkdownThemeData extends ThemeExtension<GptMarkdownThemeData> {
72 } 71 }
73 72
74 factory GptMarkdownThemeData._fromTheme( 73 factory GptMarkdownThemeData._fromTheme(
75 - ThemeData theme, TextTheme textTheme) { 74 + ThemeData theme,
  75 + TextTheme textTheme,
  76 + ) {
76 return GptMarkdownThemeData._( 77 return GptMarkdownThemeData._(
77 highlightColor: theme.colorScheme.onSurfaceVariant.withAlpha(50), 78 highlightColor: theme.colorScheme.onSurfaceVariant.withAlpha(50),
78 h1: textTheme.headlineLarge, 79 h1: textTheme.headlineLarge,
@@ -144,8 +145,10 @@ class GptMarkdownThemeData extends ThemeExtension<GptMarkdownThemeData> { @@ -144,8 +145,10 @@ class GptMarkdownThemeData extends ThemeExtension<GptMarkdownThemeData> {
144 h4: TextStyle.lerp(h4, other.h4, t) ?? h4, 145 h4: TextStyle.lerp(h4, other.h4, t) ?? h4,
145 h5: TextStyle.lerp(h5, other.h5, t) ?? h5, 146 h5: TextStyle.lerp(h5, other.h5, t) ?? h5,
146 h6: TextStyle.lerp(h6, other.h6, t) ?? h6, 147 h6: TextStyle.lerp(h6, other.h6, t) ?? h6,
147 - hrLineThickness: Tween(begin: hrLineThickness, end: other.hrLineThickness)  
148 - .transform(t), 148 + hrLineThickness: Tween(
  149 + begin: hrLineThickness,
  150 + end: other.hrLineThickness,
  151 + ).transform(t),
149 hrLineColor: Color.lerp(hrLineColor, other.hrLineColor, t) ?? hrLineColor, 152 hrLineColor: Color.lerp(hrLineColor, other.hrLineColor, t) ?? hrLineColor,
150 linkColor: Color.lerp(linkColor, other.linkColor, t) ?? linkColor, 153 linkColor: Color.lerp(linkColor, other.linkColor, t) ?? linkColor,
151 linkHoverColor: 154 linkHoverColor:
1 name: gpt_markdown 1 name: gpt_markdown
2 description: "Powerful Markdown & LaTeX Renderer for Flutter: Rich Text, Math, Tables, Links, and Text Selection. Ideal for ChatGPT, Gemini, and more." 2 description: "Powerful Markdown & LaTeX Renderer for Flutter: Rich Text, Math, Tables, Links, and Text Selection. Ideal for ChatGPT, Gemini, and more."
3 -version: 1.0.10 3 +version: 1.0.11
4 homepage: https://github.com/Infinitix-LLC/gpt_markdown 4 homepage: https://github.com/Infinitix-LLC/gpt_markdown
5 5
6 environment: 6 environment: