saminsohag

heading textstyle fixed and more supprot added

  1 +import 'dart:developer';
  2 +
1 import 'package:flutter/material.dart'; 3 import 'package:flutter/material.dart';
2 import 'package:tex_markdown/tex_markdown.dart'; 4 import 'package:tex_markdown/tex_markdown.dart';
3 5
@@ -70,6 +72,10 @@ class _MyHomePageState extends State<MyHomePage> { @@ -70,6 +72,10 @@ class _MyHomePageState extends State<MyHomePage> {
70 builder: (context, _) { 72 builder: (context, _) {
71 return TexMarkdown( 73 return TexMarkdown(
72 _controller.text, 74 _controller.text,
  75 + onLinkTab: (url, title) {
  76 + log(title, name: "title");
  77 + log(url, name: "url");
  78 + },
73 style: const TextStyle( 79 style: const TextStyle(
74 color: Colors.red, 80 color: Colors.red,
75 ), 81 ),
@@ -7,19 +7,19 @@ class MdWidget extends StatelessWidget { @@ -7,19 +7,19 @@ class MdWidget extends StatelessWidget {
7 {super.key, this.style, this.onLinkTab, this.followLinkColor = false}); 7 {super.key, this.style, this.onLinkTab, this.followLinkColor = false});
8 final String exp; 8 final String exp;
9 final TextStyle? style; 9 final TextStyle? style;
10 - final Function(String url, String title)? onLinkTab; 10 + final void Function(String url, String title)? onLinkTab;
11 final bool followLinkColor; 11 final bool followLinkColor;
12 @override 12 @override
13 Widget build(BuildContext context) { 13 Widget build(BuildContext context) {
14 - final RegExp h = RegExp(r"^(#{1,6})\s(.*)$");  
15 - final RegExp b = RegExp(r"^\*\*([^\s].*[^\s])\*\*$");  
16 - final RegExp i = RegExp(r"^\*([^\s].*[^\s])\*$");  
17 - final RegExp a = RegExp(r"^\[([^\s].*[^\s]?)?\]\(([^\s]+)?\)$"); 14 + final RegExp h = RegExp(r"^(#{1,6})\s([^\n]+)$");
  15 + final RegExp b = RegExp(r"^\*{2}(([\S^\*].*)?[\S^\*])\*{2}$");
  16 + final RegExp i = RegExp(r"^\*{1}(([\S^\*].*)?[\S^\*])\*{1}$");
  17 + final RegExp a = RegExp(r"^\[([^\s\*].*[^\s]?)?\]\(([^\s\*]+)?\)$");
18 final RegExp img = RegExp(r"^\!\[([^\s].*[^\s]?)?\]\(([^\s]+)\)$"); 18 final RegExp img = RegExp(r"^\!\[([^\s].*[^\s]?)?\]\(([^\s]+)\)$");
19 - final RegExp ul = RegExp(r"^(\-)\s(.*)$");  
20 - final RegExp ol = RegExp(r"^([0-9]+.)\s(.*)$");  
21 - final RegExp rb = RegExp(r"^\((x)?\)\s(.*)$");  
22 - final RegExp cb = RegExp(r"^\[(x)?\]\s(.*)$"); 19 + final RegExp ul = RegExp(r"^(\-)\s([^\n]+)$");
  20 + final RegExp ol = RegExp(r"^([0-9]+.)\s([^\n]+)$");
  21 + final RegExp rb = RegExp(r"^\((\x?)\)\s(\S.*)$");
  22 + final RegExp cb = RegExp(r"^\[(\x?)\]\s(\S.*)$");
23 final RegExp hr = RegExp(r"^(--)[-]+$"); 23 final RegExp hr = RegExp(r"^(--)[-]+$");
24 final RegExp table = RegExp( 24 final RegExp table = RegExp(
25 r"^(((\|[^\n\|]+\|)((([^\n\|]+\|)+)?))(\n(((\|[^\n\|]+\|)(([^\n\|]+\|)+)?)))+)?$", 25 r"^(((\|[^\n\|]+\|)((([^\n\|]+\|)+)?))(\n(((\|[^\n\|]+\|)(([^\n\|]+\|)+)?)))+)?$",
@@ -51,17 +51,16 @@ class MdWidget extends StatelessWidget { @@ -51,17 +51,16 @@ class MdWidget extends StatelessWidget {
51 children: value 51 children: value
52 .map<TableRow>( 52 .map<TableRow>(
53 (e) => TableRow( 53 (e) => TableRow(
54 - children: [  
55 - ...List.generate( 54 + children: List.generate(
56 maxCol, 55 maxCol,
57 (index) => Center( 56 (index) => Center(
58 child: MdWidget( 57 child: MdWidget(
59 - e[index] ?? "", 58 + (e[index] ?? "").trim(),
  59 + onLinkTab: onLinkTab,
60 style: style, 60 style: style,
61 ), 61 ),
62 ), 62 ),
63 ), 63 ),
64 - ],  
65 ), 64 ),
66 ) 65 )
67 .toList(), 66 .toList(),
@@ -130,6 +129,7 @@ class MdWidget extends StatelessWidget { @@ -130,6 +129,7 @@ class MdWidget extends StatelessWidget {
130 ), 129 ),
131 MdWidget( 130 MdWidget(
132 "${match?[2]}", 131 "${match?[2]}",
  132 + onLinkTab: onLinkTab,
133 style: style, 133 style: style,
134 ), 134 ),
135 ], 135 ],
@@ -152,6 +152,7 @@ class MdWidget extends StatelessWidget { @@ -152,6 +152,7 @@ class MdWidget extends StatelessWidget {
152 ), 152 ),
153 MdWidget( 153 MdWidget(
154 "${match?[2]}", 154 "${match?[2]}",
  155 + onLinkTab: onLinkTab,
155 style: style, 156 style: style,
156 ), 157 ),
157 ], 158 ],
@@ -173,6 +174,7 @@ class MdWidget extends StatelessWidget { @@ -173,6 +174,7 @@ class MdWidget extends StatelessWidget {
173 ), 174 ),
174 MdWidget( 175 MdWidget(
175 "${match?[2]}", 176 "${match?[2]}",
  177 + onLinkTab: onLinkTab,
176 style: style, 178 style: style,
177 ), 179 ),
178 ], 180 ],
@@ -190,12 +192,11 @@ class MdWidget extends StatelessWidget { @@ -190,12 +192,11 @@ class MdWidget extends StatelessWidget {
190 "${match?[1]}", 192 "${match?[1]}",
191 style: (style ?? const TextStyle()) 193 style: (style ?? const TextStyle())
192 .copyWith(fontWeight: FontWeight.bold), 194 .copyWith(fontWeight: FontWeight.bold),
193 - // color: style?.color,  
194 - // size: 12,  
195 ), 195 ),
196 ), 196 ),
197 MdWidget( 197 MdWidget(
198 "${match?[2]}", 198 "${match?[2]}",
  199 + onLinkTab: onLinkTab,
199 style: style, 200 style: style,
200 ), 201 ),
201 ], 202 ],
@@ -224,12 +225,14 @@ class MdWidget extends StatelessWidget { @@ -224,12 +225,14 @@ class MdWidget extends StatelessWidget {
224 } 225 }
225 return GestureDetector( 226 return GestureDetector(
226 onTap: () { 227 onTap: () {
227 - if (onLinkTab != null) {  
228 - onLinkTab!("${match?[2]}", "${match?[2]}"); 228 + if (onLinkTab == null) {
  229 + return;
229 } 230 }
  231 + onLinkTab!("${match?[1]}", "${match?[2]}");
230 }, 232 },
231 child: MdWidget( 233 child: MdWidget(
232 "${match?[1]}", 234 "${match?[1]}",
  235 + onLinkTab: onLinkTab,
233 style: ((followLinkColor && style != null) 236 style: ((followLinkColor && style != null)
234 ? style 237 ? style
235 : const TextStyle(color: Colors.blueAccent)) 238 : const TextStyle(color: Colors.blueAccent))
@@ -294,6 +297,7 @@ class MdWidget extends StatelessWidget { @@ -294,6 +297,7 @@ class MdWidget extends StatelessWidget {
294 .split("\n") 297 .split("\n")
295 .map<Widget>((e) => MdWidget( 298 .map<Widget>((e) => MdWidget(
296 e, 299 e,
  300 + onLinkTab: onLinkTab,
297 style: style, 301 style: style,
298 )) 302 ))
299 .toList(), 303 .toList(),
@@ -15,7 +15,7 @@ class TexMarkdown extends StatelessWidget { @@ -15,7 +15,7 @@ class TexMarkdown extends StatelessWidget {
15 }); 15 });
16 final String data; 16 final String data;
17 final TextStyle? style; 17 final TextStyle? style;
18 - final Function(String url, String title)? onLinkTab; 18 + final void Function(String url, String title)? onLinkTab;
19 final bool followLinkColor; 19 final bool followLinkColor;
20 20
21 @override 21 @override