skip to Main Content

This is My text I want to change color which is in single quotes and last id, This text is dynamic Its coming from API ->

Your query ‘THIS IS TESTING SUBJECT TRYING TO EXPLORE HAHA .’ has been raised with ticket id: #0606c2a23d9e

I want to make like this
enter image description here

How to make it like this

2

Answers


  1. you can use RichText widget for this purpose in which you can give different styling to different part of the text

    RichText(
     text: TextSpan(
     text: 'Hello ',
     style: DefaultTextStyle.of(context).style,
     children: const <TextSpan>[
      TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold)),
      TextSpan(text: ' world!'),
    ],
    ),
    )
    
    Login or Signup to reply.
  2. Let’s assume that we have a pattern with single quotes

    Your query 'THIS IS TESTING SUBJECT TRYING TO EXPLORE HAHA .' has been raised with ticket id: #0606c2a23d9e
    

    Let’s split your task into subtasks:

    First, specify the regex

    final regex = RegExp(''.+'');
    

    Next, let’s try to find our target value with regex (assume that we have it all the time to omit nullability case here)

    final target = regex.stringMatch(string)!;
    

    Next, replace the target in the original string with some placeholder

    final placeholder = '{@}';
    final updatedString = string.replaceAll(regex, placeholder);
    

    Next, split updatedString into tokens

    final tokens = updatedString.split(RegExp(' '));
    

    Next, build our TextSpan‘s by tokens. If the token is a placeholder then we replace it with the target and needed style

    final spans = tokens
        .map((e) => e == placeholder
            ? TextSpan(text: target + ' ', style: TextStyle(color: Colors.blue))
            : TextSpan(text: e + ' '))
        .toList();
    

    And last, collect everything together

    Text.rich(TextSpan(children: spans)))
    

    Full code example

    class Page extends StatelessWidget {
      final String string;
    
      const Page({Key? key, required this.string}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        final regex = RegExp(''.+'');
        const placeholder = '{@}';
        final target = regex.stringMatch(string)!;
        final updatedString = string.replaceAll(regex, placeholder);
        final tokens = updatedString.split(RegExp(' '));
        final spans = tokens
            .map((e) => e == placeholder
            ? TextSpan(text: target + ' ', style: const TextStyle(color: Colors.blue))
            : TextSpan(text: e + ' '))
            .toList();
        
        return Center(child: Text.rich(TextSpan(children: spans)));
      }
    }
    

    enter image description here

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search