opt: sys msg

This commit is contained in:
bggRGjQaUbCoE
2024-10-14 14:56:04 +08:00
parent b18412dc23
commit cd75873672

View File

@@ -7,6 +7,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:uuid/rng.dart';
import 'controller.dart';
@@ -125,14 +126,13 @@ class _SysMsgPageState extends State<SysMsgPage> {
color: Theme.of(context)
.colorScheme
.onSurface
.withOpacity(0.75),
.withOpacity(0.85),
),
),
const SizedBox(height: 5),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
SizedBox(
width: double.infinity,
child: Text(
"${_sysMsgController.msgFeedSysMsgList[i].timeAt}",
maxLines: 1,
overflow: TextOverflow.ellipsis,
@@ -140,13 +140,11 @@ class _SysMsgPageState extends State<SysMsgPage> {
.textTheme
.bodySmall!
.copyWith(
color: Theme.of(context)
.colorScheme
.outline
.withOpacity(0.8),
color:
Theme.of(context).colorScheme.outline,
),
textAlign: TextAlign.end,
),
)
],
),
],
),
@@ -171,26 +169,20 @@ class _SysMsgPageState extends State<SysMsgPage> {
InlineSpan _buildContent(String content) {
final List<InlineSpan> spanChildren = <InlineSpan>[];
RegExp urlRegExp = RegExp('#\\{([^}]*)\\}\\{"([^}]*)"\\}');
Iterable<Match> matches = urlRegExp.allMatches(content);
int previousEndIndex = 0;
if (matches.isNotEmpty) {
for (final Match match in matches) {
if (match.start > previousEndIndex) {
RegExp urlRegExp = RegExp(
'#\\{([^}]*)\\}\\{"([^}]*)"\\}|https?:\\/\\/[^\\s/\$.?#].[^\\s]*|www\\.[^\\s/\$.?#].[^\\s]*');
content.splitMapJoin(
urlRegExp,
onMatch: (Match match) {
if (match[0]!.startsWith('#')) {
spanChildren.add(
TextSpan(
text: content.substring(previousEndIndex, match.start),
),
);
}
spanChildren.add(
TextSpan(
text: match.group(1),
text: match[1],
style: TextStyle(color: Theme.of(context).colorScheme.primary),
recognizer: TapGestureRecognizer()
..onTap = () {
try {
Uri uri = Uri.parse(match.group(2)!);
Uri uri = Uri.parse(match[2]!);
PiliScheme.routePush(uri);
} catch (err) {
SmartDialog.showToast(err.toString());
@@ -198,55 +190,33 @@ class _SysMsgPageState extends State<SysMsgPage> {
},
),
);
previousEndIndex = match.end;
}
} else {
urlRegExp = RegExp(
'https?:\\/\\/[^\\s/\$.?#].[^\\s]*|www\\.[^\\s/\$.?#].[^\\s]*');
matches = urlRegExp.allMatches(content);
if (matches.isNotEmpty) {
for (final Match match in matches) {
if (match.start > previousEndIndex) {
spanChildren.add(
TextSpan(
text: content.substring(previousEndIndex, match.start),
),
);
}
spanChildren.add(
WidgetSpan(
alignment: PlaceholderAlignment.middle,
child: Icon(
size: MediaQuery.of(context).textScaler.scale(14),
Icons.link,
color: Theme.of(context).colorScheme.primary,
),
),
);
spanChildren.add(
TextSpan(
text: '网页链接',
text: '\u{1F517}网页链接',
style: TextStyle(color: Theme.of(context).colorScheme.primary),
recognizer: TapGestureRecognizer()
..onTap = () {
try {
Uri uri = Uri.parse(match.group(0)!);
Uri uri = Uri.parse(match[0]!);
PiliScheme.routePush(uri);
} catch (err) {
SmartDialog.showToast(err.toString());
Utils.copyText(match.group(0) ?? '');
Utils.copyText(match[0] ?? '');
}
},
),
);
previousEndIndex = match.end;
}
} else {
return '';
},
onNonMatch: (String nonMatchStr) {
spanChildren.add(
TextSpan(text: content),
TextSpan(text: nonMatchStr),
);
return '';
},
);
}
}
return TextSpan(children: spanChildren);
}
}