Add the ability to open attachments in their own view
This commit is contained in:
parent
e5390cda15
commit
dd724b04b1
5 changed files with 63 additions and 5 deletions
|
|
@ -60,7 +60,7 @@ A simple and user-friendly Matrix client made with Flutter and the Matrix Dart S
|
||||||
- [x] Attachments
|
- [x] Attachments
|
||||||
- [x] Blurhashing
|
- [x] Blurhashing
|
||||||
- [ ] Downloading attachments
|
- [ ] Downloading attachments
|
||||||
- [ ] Opening attachments in their own view
|
- [x] Opening attachments in their own view
|
||||||
- [ ] Polls
|
- [ ] Polls
|
||||||
- [x] Mentions
|
- [x] Mentions
|
||||||
- [x] Users
|
- [x] Users
|
||||||
|
|
|
||||||
14
lib/controllers/cross_cache_controller.dart
Normal file
14
lib/controllers/cross_cache_controller.dart
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
import "package:cross_cache/cross_cache.dart";
|
||||||
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
|
|
||||||
|
class CrossCacheController extends Notifier<CrossCache> {
|
||||||
|
static const String spaceKey = "space";
|
||||||
|
static const String roomKey = "room";
|
||||||
|
|
||||||
|
@override
|
||||||
|
CrossCache build() => CrossCache();
|
||||||
|
|
||||||
|
static final provider = NotifierProvider<CrossCacheController, CrossCache>(
|
||||||
|
CrossCacheController.new,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import "dart:async";
|
import "package:cross_cache/cross_cache.dart";
|
||||||
|
|
||||||
import "package:dynamic_polls/dynamic_polls.dart";
|
import "package:dynamic_polls/dynamic_polls.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";
|
||||||
|
|
@ -12,6 +11,7 @@ import "package:flyer_chat_system_message/flyer_chat_system_message.dart";
|
||||||
import "package:flyer_chat_text_message/flyer_chat_text_message.dart";
|
import "package:flyer_chat_text_message/flyer_chat_text_message.dart";
|
||||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||||
import "package:matrix/matrix.dart";
|
import "package:matrix/matrix.dart";
|
||||||
|
import "package:nexus/controllers/cross_cache_controller.dart";
|
||||||
import "package:nexus/controllers/selected_room_controller.dart";
|
import "package:nexus/controllers/selected_room_controller.dart";
|
||||||
import "package:nexus/controllers/room_chat_controller.dart";
|
import "package:nexus/controllers/room_chat_controller.dart";
|
||||||
import "package:nexus/helpers/extensions/better_when.dart";
|
import "package:nexus/helpers/extensions/better_when.dart";
|
||||||
|
|
@ -224,6 +224,39 @@ class RoomChat extends HookConsumerWidget {
|
||||||
globalPosition: details.globalPosition,
|
globalPosition: details.globalPosition,
|
||||||
children: getMessageOptions(message),
|
children: getMessageOptions(message),
|
||||||
),
|
),
|
||||||
|
onMessageTap:
|
||||||
|
(
|
||||||
|
context,
|
||||||
|
message, {
|
||||||
|
required details,
|
||||||
|
required index,
|
||||||
|
}) {
|
||||||
|
if (message is ImageMessage) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (_) => Dialog(
|
||||||
|
backgroundColor:
|
||||||
|
Colors.transparent,
|
||||||
|
insetPadding: EdgeInsets.all(64),
|
||||||
|
child: InteractiveViewer(
|
||||||
|
child: Image(
|
||||||
|
image: CachedNetworkImage(
|
||||||
|
message.source,
|
||||||
|
ref.watch(
|
||||||
|
CrossCacheController
|
||||||
|
.provider,
|
||||||
|
),
|
||||||
|
headers: room
|
||||||
|
.roomData
|
||||||
|
.client
|
||||||
|
.headers,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
builders: Builders(
|
builders: Builders(
|
||||||
loadMoreBuilder: (_) => Loading(),
|
loadMoreBuilder: (_) => Loading(),
|
||||||
chatAnimatedListBuilder: (_, itemBuilder) =>
|
chatAnimatedListBuilder: (_, itemBuilder) =>
|
||||||
|
|
@ -432,6 +465,17 @@ class RoomChat extends HookConsumerWidget {
|
||||||
groupStatus: groupStatus,
|
groupStatus: groupStatus,
|
||||||
alwaysShow: true,
|
alwaysShow: true,
|
||||||
),
|
),
|
||||||
|
customImageProvider:
|
||||||
|
CachedNetworkImage(
|
||||||
|
message.source,
|
||||||
|
ref.watch(
|
||||||
|
CrossCacheController.provider,
|
||||||
|
),
|
||||||
|
headers: room
|
||||||
|
.roomData
|
||||||
|
.client
|
||||||
|
.headers,
|
||||||
|
),
|
||||||
errorBuilder:
|
errorBuilder:
|
||||||
(context, error, stackTrace) =>
|
(context, error, stackTrace) =>
|
||||||
Center(
|
Center(
|
||||||
|
|
@ -446,7 +490,6 @@ class RoomChat extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
message: message,
|
message: message,
|
||||||
index: index,
|
index: index,
|
||||||
headers: room.roomData.client.headers,
|
|
||||||
),
|
),
|
||||||
fileMessageBuilder:
|
fileMessageBuilder:
|
||||||
(
|
(
|
||||||
|
|
|
||||||
|
|
@ -258,7 +258,7 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.15.0"
|
version: "1.15.0"
|
||||||
cross_cache:
|
cross_cache:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cross_cache
|
name: cross_cache
|
||||||
sha256: "4983a16603cc99b0a14de6a772fa8ee4533411f46f3c423f1386fea7566049c5"
|
sha256: "4983a16603cc99b0a14de6a772fa8ee4533411f46f3c423f1386fea7566049c5"
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@ dependencies:
|
||||||
flutter_secure_storage: ^10.0.0
|
flutter_secure_storage: ^10.0.0
|
||||||
dynamic_polls: ^0.0.6
|
dynamic_polls: ^0.0.6
|
||||||
flutter_hooks: ^0.21.3+1
|
flutter_hooks: ^0.21.3+1
|
||||||
|
cross_cache: ^1.1.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