feat: support rendering text background color and text color

This commit is contained in:
Lucas.Xu 2022-08-09 11:20:53 +08:00
parent fdbecd7f10
commit f4a31768cb
2 changed files with 36 additions and 16 deletions

View File

@ -37,7 +37,11 @@
"type": "text", "type": "text",
"delta": [ "delta": [
{ {
"insert": "At AppFlowy, we embody what we value deep in our hearts, taking inspiration from other great companies while forging our own path. AppFlowys five core values are Mission Driven, Aim High & Iterate, Transparency, Collaboration, and Honesty. Together, they spell MATCH. We will continue to iterate and refine these values as we grow." "insert": "At "
},
{ "insert": "AppFlowy", "attributes": { "code": true, "bold": true, "color": "0xFFED459C"} },
{
"insert": ", we embody what we value deep in our hearts, taking inspiration from other great companies while forging our own path. AppFlowys five core values are Mission Driven, Aim High & Iterate, Transparency, Collaboration, and Honesty. Together, they spell MATCH. We will continue to iterate and refine these values as we grow."
} }
] ]
}, },

View File

@ -183,19 +183,30 @@ class RichTextStyle {
return TextSpan( return TextSpan(
text: text, text: text,
style: TextStyle( style: TextStyle(
fontWeight: fontWeight, fontWeight: _fontWeight,
fontStyle: fontStyle, fontStyle: _fontStyle,
fontSize: fontSize, fontSize: _fontSize,
color: textColor, color: _textColor,
backgroundColor: backgroundColor, decoration: _textDecoration,
decoration: textDecoration, background: _background,
), ),
recognizer: recognizer, recognizer: _recognizer,
); );
} }
Paint? get _background {
if (_backgroundColor != null) {
return Paint()
..color = _backgroundColor!
..strokeWidth = 24.0
..style = PaintingStyle.fill
..strokeJoin = StrokeJoin.round;
}
return null;
}
// bold // bold
FontWeight get fontWeight { FontWeight get _fontWeight {
if (attributes.bold) { if (attributes.bold) {
return FontWeight.bold; return FontWeight.bold;
} }
@ -203,7 +214,7 @@ class RichTextStyle {
} }
// underline or strikethrough // underline or strikethrough
TextDecoration get textDecoration { TextDecoration get _textDecoration {
var decorations = [TextDecoration.none]; var decorations = [TextDecoration.none];
if (attributes.underline || attributes.href != null) { if (attributes.underline || attributes.href != null) {
decorations.add(TextDecoration.underline); decorations.add(TextDecoration.underline);
@ -216,28 +227,33 @@ class RichTextStyle {
} }
// font // font
FontStyle get fontStyle => FontStyle get _fontStyle =>
attributes.italic ? FontStyle.italic : FontStyle.normal; attributes.italic ? FontStyle.italic : FontStyle.normal;
// text color // text color
Color get textColor { Color get _textColor {
if (attributes.href != null) { if (attributes.href != null) {
return Colors.lightBlue; return Colors.lightBlue;
} }
return attributes.color ?? Colors.black; return attributes.color ?? Colors.black;
} }
Color get backgroundColor { Color? get _backgroundColor {
return attributes.highlightColor ?? Colors.transparent; if (attributes.highlightColor != null) {
return attributes.highlightColor!;
} else if (attributes.code) {
return Colors.grey.withOpacity(0.4);
}
return null;
} }
// font size // font size
double get fontSize { double get _fontSize {
return baseFontSize; return baseFontSize;
} }
// recognizer // recognizer
GestureRecognizer? get recognizer { GestureRecognizer? get _recognizer {
final href = attributes.href; final href = attributes.href;
if (href != null) { if (href != null) {
return TapGestureRecognizer() return TapGestureRecognizer()