Package selection guidance compiled from public package information, community data, and project usage.
A Flutter package that enables simple rich text rendering in Dart strings, allowing users to format text with basic styling using intuitive syntax. It supports common formatting like bold, italic, and color through embedded characters, making it easy to display styled text without complex widget hierarchies. Ideal for apps needing lightweight, readable text formatting with minimal boilerplate. The package is cross-platform, working seamlessly across Android, iOS, Web, macOS, Windows, and Linux.
Use cases
Display formatted user messages
Render styled notifications
Create dynamic text labels
Show rich content in chat interfaces
Enhance UI with minimal code
Key features
Simple character-based formatting
Cross-platform support
Minimal widget nesting
Supports bold, italic, and color
Easy integration with existing text widgets
Suitable for
Beginner Flutter developers
Apps with simple text styling needs
Chat or messaging interfaces
Lightweight rich text requirements
Rapid prototyping
Considerations
Limited to basic formatting
Not suitable for complex layouts
No support for advanced typography
Requires careful string escaping
May impact readability if overused
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
simple_rich_text
Easily format Flutter text with simple format characters.
Motivation: lowest-possible development friction to add color and formatting to text.
In comparison, easy_rich_text requires lots of code (i.e, patternList of EasyRichTextPattern objects).
Format Characters
These are non-standard (not markdown compatible) but are more intuitive, in my opinion:
format character
format effect
simple_rich_text string input
Flutter output
asterisk (*)
bold
"this is *bold*"
this is bold
slash (/)
italics
"this is /italicized/"
this is italicized
underscore (_)
underline
"this is _underlined_"
this is underlined
Example Input
SimpleRichText(r'*_/this is all three*_/ (*{color:red}bold*, _{color:green}underlined_, and /{color:brown}italicized/). _{push:home;color:blue}clickable hyperlink to home screen_')
Example Flutter Output
Attributes
Attribute pairs are placed in curly brackets immediately after first character marker.
Each pair is separated by a semicolon (;) and can be in any order.
Each pair has syntax name:value.
key
meaning
implemented Dart code
color
red, blue, etc
textStyle.color: color-value
pop
pop the navigation stack
Navigator.pop(context);
push
push the value onto the navigation stack
Navigator.pushNamed(context, '/$route');
repl
replace the top route on the navigation stack
Navigator.popAndPushNamed(context, '/$route');
Colors Supported
Change text color by passing color as attribute:
Example
"this is blue hyperlink to the _{color:blue,push:calendar}calendar_ screen"
color:color_value
hex value
aqua
0x00FFFF
black
0x000000
blue
0x0000FF
brown
0x9A6324
cream
0xFFFDD0
cyan
0x46f0f0
green
0x00FF00
gray
0x808080
grey
0x808080
mint
0xAAFFC3
lavender
0xE6BEFF
new
0xFFFF00
olive
0x808000
orange
0xFFA500
pink
0xFFE1E6
purple
0x800080
red
0xFF0000
silver
0xC0C0C0
white
0xFFFFFF
yellow
0xFFFF00
Features
support text hyperlinks to other screens by preceding formatted text with route inside curly brackets: e.g., "... {calendar}go to calendar screen".
Sample Inputs:
'this is /italic/''this is *bold*''*_/this is all three*_/ (*bold*, _underlined_, and /italicized/)''you can quote characters to NOT format a word \*bold\*''this is _underline_''go to _{/myroute}home_ page''this is ~important~(red).''this is _*bold and underlined*_.'
Notes
You can use multiple characters at the same time:
"this is _/underlined and italicized/_"
You can be sloppy! Unlike HTML, for convenience, if using multiple characters the open and closed sequences, they don't need to be in exact palindrome matching order:
"these are */equivalent/* and works without problems.""these are */equivalent*/ and works without problems."
Requirements
Ancestor MUST have textDirection set (required by internal RichText widget), either through MaterialApp widget or explicitly wrapped by a Directionality widget: