only render message as html when content is set to html
This commit is contained in:
parent
f4624c2866
commit
35bf379f03
4 changed files with 47 additions and 21 deletions
|
|
@ -47,6 +47,7 @@ class MessageController extends AsyncNotifier<Message?> {
|
||||||
"eventType": type,
|
"eventType": type,
|
||||||
"pmp": event.content["com.beeper.per_message_profile"],
|
"pmp": event.content["com.beeper.per_message_profile"],
|
||||||
"error": event.sendError,
|
"error": event.sendError,
|
||||||
|
"format": content["format"],
|
||||||
"editSource":
|
"editSource":
|
||||||
event.localContent?.editSource ??
|
event.localContent?.editSource ??
|
||||||
newContent?["body"] ??
|
newContent?["body"] ??
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import "package:cross_cache/cross_cache.dart";
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_chat_core/flutter_chat_core.dart";
|
import "package:flutter_chat_core/flutter_chat_core.dart";
|
||||||
import "package:flutter_link_previewer/flutter_link_previewer.dart";
|
import "package:flutter_link_previewer/flutter_link_previewer.dart";
|
||||||
|
import "package:flutter_linkify/flutter_linkify.dart";
|
||||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
import "package:nexus/controllers/cross_cache_controller.dart";
|
import "package:nexus/controllers/cross_cache_controller.dart";
|
||||||
import "package:nexus/controllers/url_preview_controller.dart";
|
import "package:nexus/controllers/url_preview_controller.dart";
|
||||||
|
|
@ -60,29 +61,36 @@ class TextMessageWrapper extends ConsumerWidget {
|
||||||
onTapReply: onTapReply,
|
onTapReply: onTapReply,
|
||||||
),
|
),
|
||||||
if (content != null)
|
if (content != null)
|
||||||
Html(
|
message.metadata?["format"] == "org.matrix.custom.html"
|
||||||
textStyle: message.metadata?["big"] == true
|
? Html(
|
||||||
? TextStyle(fontSize: 32)
|
textStyle: message.metadata?["big"] == true
|
||||||
: null,
|
? TextStyle(fontSize: 32)
|
||||||
content!
|
: null,
|
||||||
.replaceAllMapped(
|
content!.replaceAllMapped(
|
||||||
RegExp(
|
RegExp(
|
||||||
"(<a\\b[^>]*>.*?<\\/a>)|(\\bhttps?:\\/\\/[^\\s<]+)",
|
"(<a\\b[^>]*>.*?<\\/a>)|(\\bhttps?:\\/\\/[^\\s<]+)",
|
||||||
caseSensitive: false,
|
caseSensitive: false,
|
||||||
),
|
dotAll: true,
|
||||||
(m) {
|
),
|
||||||
// If it's already an <a> tag, leave it unchanged
|
(m) {
|
||||||
if (m.group(1) != null) {
|
// If it's already an <a> tag, leave it unchanged
|
||||||
return m.group(1)!;
|
if (m.group(1) != null) {
|
||||||
}
|
return m.group(1)!;
|
||||||
|
}
|
||||||
|
|
||||||
// Otherwise, wrap the bare URL
|
// Otherwise, wrap the bare URL
|
||||||
final url = m.group(2)!;
|
final url = m.group(2)!;
|
||||||
return "<a href=\"$url\">$url</a>";
|
return "<a href=\"$url\">$url</a>";
|
||||||
},
|
},
|
||||||
|
),
|
||||||
)
|
)
|
||||||
.replaceAll("\n", "<br class=\"fake-break\"/>"),
|
: Linkify(
|
||||||
),
|
text: content!,
|
||||||
|
options: LinkifyOptions(humanize: false),
|
||||||
|
linkStyle: TextStyle(
|
||||||
|
color: Theme.of(context).colorScheme.primary,
|
||||||
|
),
|
||||||
|
),
|
||||||
if (textMessage?.editedAt != null)
|
if (textMessage?.editedAt != null)
|
||||||
Text("(edited)", style: theme.textTheme.labelSmall),
|
Text("(edited)", style: theme.textTheme.labelSmall),
|
||||||
if (textMessage != null)
|
if (textMessage != null)
|
||||||
|
|
|
||||||
16
pubspec.lock
16
pubspec.lock
|
|
@ -495,6 +495,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.0"
|
version: "4.2.0"
|
||||||
|
flutter_linkify:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_linkify
|
||||||
|
sha256: "74669e06a8f358fee4512b4320c0b80e51cffc496607931de68d28f099254073"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.0.0"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
|
@ -822,6 +830,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.2"
|
version: "3.0.2"
|
||||||
|
linkify:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: linkify
|
||||||
|
sha256: "4139ea77f4651ab9c315b577da2dd108d9aa0bd84b5d03d33323f1970c645832"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.0.0"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ dependencies:
|
||||||
ffigen: ^20.1.1
|
ffigen: ^20.1.1
|
||||||
timeago: ^3.7.1
|
timeago: ^3.7.1
|
||||||
http: ^1.6.0
|
http: ^1.6.0
|
||||||
|
flutter_linkify: ^6.0.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
build_runner: ^2.4.11
|
build_runner: ^2.4.11
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue