forked from Henry-Hiles/nexus
Fix inline widgets
This commit is contained in:
parent
bbe36ff86f
commit
3ab8451a64
7 changed files with 40 additions and 33 deletions
|
|
@ -34,6 +34,7 @@ New Value: ${newValue is AsyncData ? newValue.value : newValue}
|
||||||
void showError(Object error, [StackTrace? stackTrace]) {
|
void showError(Object error, [StackTrace? stackTrace]) {
|
||||||
if (error.toString().contains("DioException")) return;
|
if (error.toString().contains("DioException")) return;
|
||||||
if (error.toString().contains("UTF-16")) return;
|
if (error.toString().contains("UTF-16")) return;
|
||||||
|
if (error.toString().contains("Invalid image data")) return;
|
||||||
|
|
||||||
debugPrintStack(stackTrace: stackTrace, label: error.toString());
|
debugPrintStack(stackTrace: stackTrace, label: error.toString());
|
||||||
if (navigatorKey.currentContext != null) {
|
if (navigatorKey.currentContext != null) {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import "package:nexus/models/image_data.dart";
|
||||||
import "package:nexus/widgets/chat_page/html/mention_chip.dart";
|
import "package:nexus/widgets/chat_page/html/mention_chip.dart";
|
||||||
import "package:nexus/widgets/chat_page/html/spoiler_text.dart";
|
import "package:nexus/widgets/chat_page/html/spoiler_text.dart";
|
||||||
import "package:nexus/widgets/chat_page/html/code_block.dart";
|
import "package:nexus/widgets/chat_page/html/code_block.dart";
|
||||||
import "package:nexus/widgets/chat_page/quoted.dart";
|
import "package:nexus/widgets/chat_page/html/quoted.dart";
|
||||||
import "package:nexus/widgets/error_dialog.dart";
|
import "package:nexus/widgets/error_dialog.dart";
|
||||||
|
|
||||||
class Html extends ConsumerWidget {
|
class Html extends ConsumerWidget {
|
||||||
|
|
@ -23,7 +23,7 @@ class Html extends ConsumerWidget {
|
||||||
html,
|
html,
|
||||||
customWidgetBuilder: (element) {
|
customWidgetBuilder: (element) {
|
||||||
if (element.attributes.keys.contains("data-mx-spoiler")) {
|
if (element.attributes.keys.contains("data-mx-spoiler")) {
|
||||||
return SpoilerText(text: element.text);
|
return InlineCustomWidget(child: SpoilerText(text: element.text));
|
||||||
}
|
}
|
||||||
|
|
||||||
final height = int.tryParse(element.attributes["height"] ?? "") ?? 300;
|
final height = int.tryParse(element.attributes["height"] ?? "") ?? 300;
|
||||||
|
|
@ -42,7 +42,7 @@ class Html extends ConsumerWidget {
|
||||||
|
|
||||||
"a" =>
|
"a" =>
|
||||||
Uri.tryParse(element.attributes["href"] ?? "")?.host == "matrix.to"
|
Uri.tryParse(element.attributes["href"] ?? "")?.host == "matrix.to"
|
||||||
? MentionChip(element.text)
|
? InlineCustomWidget(child: MentionChip(element.text))
|
||||||
: null,
|
: null,
|
||||||
|
|
||||||
"img" =>
|
"img" =>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart";
|
|
||||||
import "package:matrix/matrix.dart";
|
import "package:matrix/matrix.dart";
|
||||||
|
|
||||||
class MentionChip extends StatelessWidget {
|
class MentionChip extends StatelessWidget {
|
||||||
|
|
@ -7,8 +6,7 @@ class MentionChip extends StatelessWidget {
|
||||||
const MentionChip(this.label, {super.key});
|
const MentionChip(this.label, {super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) => InlineCustomWidget(
|
Widget build(BuildContext context) => ActionChip(
|
||||||
child: ActionChip(
|
|
||||||
label: Text(
|
label: Text(
|
||||||
label.parseIdentifierIntoParts()?.primaryIdentifier ?? label,
|
label.parseIdentifierIntoParts()?.primaryIdentifier ?? label,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
|
|
@ -21,6 +19,5 @@ class MentionChip extends StatelessWidget {
|
||||||
// TODO: Open room or join room dialog, or user popover
|
// TODO: Open room or join room dialog, or user popover
|
||||||
showAboutDialog(context: context);
|
showAboutDialog(context: context);
|
||||||
},
|
},
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_hooks/flutter_hooks.dart";
|
import "package:flutter_hooks/flutter_hooks.dart";
|
||||||
import "package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart";
|
|
||||||
|
|
||||||
class SpoilerText extends HookWidget {
|
class SpoilerText extends HookWidget {
|
||||||
final String text;
|
final String text;
|
||||||
|
|
@ -11,8 +10,7 @@ class SpoilerText extends HookWidget {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final revealed = useState(false);
|
final revealed = useState(false);
|
||||||
|
|
||||||
return InlineCustomWidget(
|
return InkWell(
|
||||||
child: InkWell(
|
|
||||||
onTap: () => revealed.value = !revealed.value,
|
onTap: () => revealed.value = !revealed.value,
|
||||||
child: AnimatedContainer(
|
child: AnimatedContainer(
|
||||||
duration: const Duration(milliseconds: 100),
|
duration: const Duration(milliseconds: 100),
|
||||||
|
|
@ -26,7 +24,6 @@ class SpoilerText extends HookWidget {
|
||||||
style: TextStyle(color: revealed.value ? null : Colors.transparent),
|
style: TextStyle(color: revealed.value ? null : Colors.transparent),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -262,6 +262,18 @@ class RoomChat extends HookConsumerWidget {
|
||||||
groupStatus: groupStatus,
|
groupStatus: groupStatus,
|
||||||
alwaysShow: true,
|
alwaysShow: true,
|
||||||
),
|
),
|
||||||
|
errorBuilder:
|
||||||
|
(context, error, stackTrace) =>
|
||||||
|
Center(
|
||||||
|
child: Text(
|
||||||
|
"Image Failed to Load",
|
||||||
|
style: TextStyle(
|
||||||
|
color: Theme.of(
|
||||||
|
context,
|
||||||
|
).colorScheme.error,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
message: message,
|
message: message,
|
||||||
index: index,
|
index: index,
|
||||||
headers: room.roomData.client.headers,
|
headers: room.roomData.client.headers,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ 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_chat_ui/flutter_chat_ui.dart";
|
import "package:flutter_chat_ui/flutter_chat_ui.dart";
|
||||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
import "package:nexus/widgets/chat_page/quoted.dart";
|
import "package:nexus/widgets/chat_page/html/quoted.dart";
|
||||||
|
|
||||||
class TopWidget extends ConsumerWidget {
|
class TopWidget extends ConsumerWidget {
|
||||||
final Message message;
|
final Message message;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue