mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 11:08:03 +08:00
opt opus text
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -40,6 +40,7 @@ class OpusContent extends StatelessWidget {
|
||||
required Node item,
|
||||
required ColorScheme colorScheme,
|
||||
bool isQuote = false,
|
||||
required double surfaceLuminance,
|
||||
}) {
|
||||
switch (item.type) {
|
||||
case 'TEXT_NODE_TYPE_RICH' when (item.rich != null):
|
||||
@@ -101,7 +102,8 @@ class OpusContent extends StatelessWidget {
|
||||
default:
|
||||
return _getSpan(
|
||||
item.word,
|
||||
isQuote ? colorScheme.onSurfaceVariant : null,
|
||||
surfaceLuminance: surfaceLuminance,
|
||||
defaultColor: isQuote ? colorScheme.onSurfaceVariant : null,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -118,14 +120,27 @@ class OpusContent extends StatelessWidget {
|
||||
fontSize: fontSize,
|
||||
);
|
||||
|
||||
static TextSpan _getSpan(Word? word, [Color? defaultColor]) => TextSpan(
|
||||
text: word?.words,
|
||||
style: _getStyle(
|
||||
word?.style,
|
||||
word?.color != null ? Color(word!.color!) : defaultColor,
|
||||
word?.fontSize,
|
||||
),
|
||||
);
|
||||
static TextSpan _getSpan(
|
||||
Word? word, {
|
||||
Color? defaultColor,
|
||||
required double surfaceLuminance,
|
||||
}) {
|
||||
Color? color;
|
||||
if (word?.color case final c?) {
|
||||
final tmpColor = Color(c);
|
||||
if ((surfaceLuminance - tmpColor.computeLuminance()).abs() > 0.1) {
|
||||
color = tmpColor;
|
||||
}
|
||||
}
|
||||
return TextSpan(
|
||||
text: word?.words,
|
||||
style: _getStyle(
|
||||
word?.style,
|
||||
color ?? defaultColor,
|
||||
word?.fontSize,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -138,6 +153,9 @@ class OpusContent extends StatelessWidget {
|
||||
late final isDarkMode = context.isDarkMode;
|
||||
|
||||
final colorScheme = Theme.of(context).colorScheme;
|
||||
|
||||
late final surfaceLuminance = colorScheme.surface.computeLuminance();
|
||||
|
||||
return SliverList.separated(
|
||||
itemCount: opus.length,
|
||||
itemBuilder: (context, index) {
|
||||
@@ -151,8 +169,11 @@ class OpusContent extends StatelessWidget {
|
||||
TextSpan(
|
||||
children: element.text?.nodes
|
||||
?.map(
|
||||
(item) =>
|
||||
_node2Widget(item: item, colorScheme: colorScheme),
|
||||
(item) => _node2Widget(
|
||||
item: item,
|
||||
colorScheme: colorScheme,
|
||||
surfaceLuminance: surfaceLuminance,
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
@@ -241,7 +262,10 @@ class OpusContent extends StatelessWidget {
|
||||
),
|
||||
...entry.$2.nodes!.map((item) {
|
||||
if (item.word != null) {
|
||||
return _getSpan(item.word);
|
||||
return _getSpan(
|
||||
item.word,
|
||||
surfaceLuminance: surfaceLuminance,
|
||||
);
|
||||
}
|
||||
if (item.rich case final rich?) {
|
||||
final hasUrl = rich.jumpUrl?.isNotEmpty == true;
|
||||
@@ -600,7 +624,11 @@ class OpusContent extends StatelessWidget {
|
||||
TextSpan(
|
||||
children: element.heading!.nodes!
|
||||
.map(
|
||||
(e) => _node2Widget(item: e, colorScheme: colorScheme),
|
||||
(e) => _node2Widget(
|
||||
item: e,
|
||||
colorScheme: colorScheme,
|
||||
surfaceLuminance: surfaceLuminance,
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
@@ -612,7 +640,12 @@ class OpusContent extends StatelessWidget {
|
||||
textAlign: element.align == 1 ? TextAlign.center : null,
|
||||
TextSpan(
|
||||
children: element.text!.nodes!
|
||||
.map<TextSpan>((item) => _getSpan(item.word))
|
||||
.map<TextSpan>(
|
||||
(item) => _getSpan(
|
||||
item.word,
|
||||
surfaceLuminance: surfaceLuminance,
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user