saminsohag

example file improved

@@ -6,7 +6,6 @@ import 'package:gpt_markdown/gpt_markdown.dart'; @@ -6,7 +6,6 @@ import 'package:gpt_markdown/gpt_markdown.dart';
6 import 'package:flutter_math_fork/flutter_math.dart'; 6 import 'package:flutter_math_fork/flutter_math.dart';
7 import 'package:watcher/watcher.dart'; 7 import 'package:watcher/watcher.dart';
8 8
9 -//  
10 void main() { 9 void main() {
11 runApp(const MyApp()); 10 runApp(const MyApp());
12 } 11 }
@@ -37,7 +36,7 @@ class _MyAppState extends State<MyApp> { @@ -37,7 +36,7 @@ class _MyAppState extends State<MyApp> {
37 colorSchemeSeed: Colors.blue, 36 colorSchemeSeed: Colors.blue,
38 ), 37 ),
39 home: MyHomePage( 38 home: MyHomePage(
40 - title: 'Flutter Demo Home Page', 39 + title: 'GptMarkdown',
41 onPressed: () { 40 onPressed: () {
42 setState(() { 41 setState(() {
43 _themeMode = (_themeMode == ThemeMode.dark) 42 _themeMode = (_themeMode == ThemeMode.dark)
@@ -50,7 +49,6 @@ class _MyAppState extends State<MyApp> { @@ -50,7 +49,6 @@ class _MyAppState extends State<MyApp> {
50 } 49 }
51 } 50 }
52 51
53 -//  
54 class MyHomePage extends StatefulWidget { 52 class MyHomePage extends StatefulWidget {
55 const MyHomePage({super.key, required this.title, required this.onPressed}); 53 const MyHomePage({super.key, required this.title, required this.onPressed});
56 final VoidCallback? onPressed; 54 final VoidCallback? onPressed;
@@ -145,6 +143,7 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex @@ -145,6 +143,7 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex
145 } 143 }
146 144
147 bool writingMod = true; 145 bool writingMod = true;
  146 + bool selectable = false;
148 147
149 @override 148 @override
150 Widget build(BuildContext context) { 149 Widget build(BuildContext context) {
@@ -155,6 +154,19 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex @@ -155,6 +154,19 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex
155 IconButton( 154 IconButton(
156 onPressed: () { 155 onPressed: () {
157 setState(() { 156 setState(() {
  157 + selectable = !selectable;
  158 + });
  159 + },
  160 + icon: Icon(
  161 + Icons.select_all_outlined,
  162 + color: selectable
  163 + ? Theme.of(context).colorScheme.onSurfaceVariant
  164 + : Theme.of(context).colorScheme.onSurface.withOpacity(0.38),
  165 + ),
  166 + ),
  167 + IconButton(
  168 + onPressed: () {
  169 + setState(() {
158 _direction = TextDirection.values[(_direction.index + 1) % 2]; 170 _direction = TextDirection.values[(_direction.index + 1) % 2];
159 }); 171 });
160 }, 172 },
@@ -168,7 +180,8 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex @@ -168,7 +180,8 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex
168 onPressed: () => setState(() { 180 onPressed: () => setState(() {
169 writingMod = !writingMod; 181 writingMod = !writingMod;
170 }), 182 }),
171 - icon: const Icon(Icons.arrow_drop_down), 183 + icon:
  184 + Icon(writingMod ? Icons.arrow_drop_down : Icons.arrow_drop_up),
172 ), 185 ),
173 ], 186 ],
174 ), 187 ),
@@ -193,50 +206,43 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex @@ -193,50 +206,43 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex
193 AnimatedBuilder( 206 AnimatedBuilder(
194 animation: _controller, 207 animation: _controller,
195 builder: (context, _) { 208 builder: (context, _) {
196 - return Material(  
197 - // color: Theme.of(context).colorScheme.surfaceVariant,  
198 - shape: RoundedRectangleBorder(  
199 - side: BorderSide( 209 + return Container(
  210 + padding: const EdgeInsets.all(8),
  211 + decoration: BoxDecoration(
  212 + border: Border.all(
200 width: 1, 213 width: 1,
201 color: Theme.of(context).colorScheme.outline), 214 color: Theme.of(context).colorScheme.outline),
202 ), 215 ),
203 - child:  
204 - LayoutBuilder(builder: (context, constraints) {  
205 - return Theme(  
206 - data: Theme.of(context),  
207 - // .copyWith(  
208 - // textTheme: const TextTheme(  
209 - // // For H1.  
210 - // headlineLarge: TextStyle(fontSize: 55),  
211 - // // For H2.  
212 - // headlineMedium: TextStyle(fontSize: 45),  
213 - // // For H3.  
214 - // headlineSmall: TextStyle(fontSize: 35),  
215 - // // For H4.  
216 - // titleLarge: TextStyle(fontSize: 25),  
217 - // // For H5.  
218 - // titleMedium: TextStyle(fontSize: 15),  
219 - // // For H6.  
220 - // titleSmall: TextStyle(fontSize: 10),  
221 - // ),  
222 - // ),  
223 - child: Padding(  
224 - padding: const EdgeInsets.all(8.0),  
225 - child: TexMarkdown( 216 + child: Theme(
  217 + data: Theme.of(context),
  218 + // .copyWith(
  219 + // textTheme: const TextTheme(
  220 + // // For H1.
  221 + // headlineLarge: TextStyle(fontSize: 55),
  222 + // // For H2.
  223 + // headlineMedium: TextStyle(fontSize: 45),
  224 + // // For H3.
  225 + // headlineSmall: TextStyle(fontSize: 35),
  226 + // // For H4.
  227 + // titleLarge: TextStyle(fontSize: 25),
  228 + // // For H5.
  229 + // titleMedium: TextStyle(fontSize: 15),
  230 + // // For H6.
  231 + // titleSmall: TextStyle(fontSize: 10),
  232 + // ),
  233 + // ),
  234 + child: Builder(
  235 + builder: (context) {
  236 + Widget child = TexMarkdown(
226 _controller.text, 237 _controller.text,
227 textDirection: _direction, 238 textDirection: _direction,
228 onLinkTab: (url, title) { 239 onLinkTab: (url, title) {
229 debugPrint(url); 240 debugPrint(url);
230 debugPrint(title); 241 debugPrint(title);
231 }, 242 },
232 - // maxLines: 7,  
233 - // overflow: TextOverflow.ellipsis,  
234 textAlign: TextAlign.justify, 243 textAlign: TextAlign.justify,
235 - // textScaler: const TextScaler.linear(1.3),  
236 textScaler: const TextScaler.linear(1), 244 textScaler: const TextScaler.linear(1),
237 style: const TextStyle( 245 style: const TextStyle(
238 - // Regular text font size here.  
239 - color: Colors.red,  
240 fontSize: 15, 246 fontSize: 15,
241 ), 247 ),
242 latexWorkaround: (tex) { 248 latexWorkaround: (tex) {
@@ -344,11 +350,15 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex @@ -344,11 +350,15 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex
344 ), 350 ),
345 ); 351 );
346 }, 352 },
347 - ),  
348 - ),  
349 - // child: const Text("Hello"),  
350 - );  
351 - }), 353 + );
  354 + if (selectable) {
  355 + child = SelectionArea(child: child);
  356 + }
  357 + return child;
  358 + },
  359 + ),
  360 + // child: const Text("Hello"),
  361 + ),
352 ); 362 );
353 }, 363 },
354 ), 364 ),