Skip to content

Instantly share code, notes, and snippets.

@dutsky
Created August 8, 2023 17:16
Show Gist options
  • Save dutsky/20e7b12f67fe102577c2af65691d6b11 to your computer and use it in GitHub Desktop.
Save dutsky/20e7b12f67fe102577c2af65691d6b11 to your computer and use it in GitHub Desktop.

Revisions

  1. dutsky created this gist Aug 8, 2023.
    102 changes: 102 additions & 0 deletions main.dart
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,102 @@
    import 'package:flutter/material.dart';
    import 'package:flutter/gestures.dart';

    const Color darkBlue = Color.fromARGB(255, 18, 32, 47);

    void main() {
    runApp(MyApp());
    }

    class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    theme: ThemeData.dark().copyWith(
    scaffoldBackgroundColor: darkBlue,
    ),
    debugShowCheckedModeBanner: false,
    home: Scaffold(
    body: Center(
    child: MyWidget(),
    ),
    ),
    );
    }
    }

    class MyWidget extends StatefulWidget {
    @override
    State<MyWidget> createState() => _MyWidgetState();
    }

    class _MyWidgetState extends State<MyWidget> {
    late TextEditingController _controller;

    @override
    void initState() {
    super.initState();
    _controller = BestTextEditingController(text: 'Hello');
    }

    @override
    void dispose() {
    _controller.dispose();
    super.dispose();
    }

    @override
    Widget build(BuildContext context) {
    return Column(
    mainAxisSize: MainAxisSize.min,
    children: [
    RichText(
    text: TextSpan(
    text: 'Hello ',
    style: Theme.of(context).textTheme.headlineMedium,
    children: [
    TextSpan(
    text: 'World!',
    style: Theme.of(context).textTheme.headlineMedium?.copyWith(
    decoration: TextDecoration.underline,
    ),
    recognizer: TapGestureRecognizer()
    ..onTap = () => print('Hello, world!'),
    )
    ],
    ),
    ),
    TextField(
    controller: _controller,
    style: Theme.of(context).textTheme.headlineMedium,
    maxLines: 10,
    minLines: 10,
    ),
    ],
    );
    }
    }

    class BestTextEditingController extends TextEditingController {
    BestTextEditingController({super.text});

    @override
    TextSpan buildTextSpan({
    required BuildContext context,
    TextStyle? style,
    required bool withComposing,
    }) {
    return TextSpan(
    style: style,
    children: [
    TextSpan(
    text: text,
    style: Theme.of(context).textTheme.headlineMedium?.copyWith(
    decoration: TextDecoration.underline,
    ),
    // recognizer: TapGestureRecognizer()
    // ..onTap = () => print('Hello, world!'),
    ),
    ],
    );
    }
    }