fix: Image viewer
This commit is contained in:
parent
83f886a088
commit
dcfbf8f8a5
5 changed files with 71 additions and 99 deletions
|
|
@ -8,9 +8,10 @@ import 'package:vrouter/vrouter.dart';
|
|||
import '../utils/matrix_sdk_extensions.dart/event_extension.dart';
|
||||
|
||||
class ImageViewer extends StatefulWidget {
|
||||
final Event event;
|
||||
final void Function() onLoaded;
|
||||
|
||||
const ImageViewer({Key key, this.onLoaded}) : super(key: key);
|
||||
const ImageViewer(this.event, {Key key, this.onLoaded}) : super(key: key);
|
||||
|
||||
@override
|
||||
ImageViewerController createState() => ImageViewerController();
|
||||
|
|
@ -18,14 +19,13 @@ class ImageViewer extends StatefulWidget {
|
|||
|
||||
class ImageViewerController extends State<ImageViewer> {
|
||||
/// Forward this image to another room.
|
||||
void forwardAction(Event event) {
|
||||
Matrix.of(context).shareContent = event.content;
|
||||
void forwardAction() {
|
||||
Matrix.of(context).shareContent = widget.event.content;
|
||||
VRouter.of(context).push('/rooms');
|
||||
}
|
||||
|
||||
/// Open this file with a system call.
|
||||
void openFileAction(Event event) =>
|
||||
event.openFile(context, downloadOnly: true);
|
||||
void openFileAction() => widget.event.openFile(context, downloadOnly: true);
|
||||
|
||||
/// Go back if user swiped it away
|
||||
void onInteractionEnds(ScaleEndDetails endDetails) {
|
||||
|
|
@ -37,16 +37,6 @@ class ImageViewerController extends State<ImageViewer> {
|
|||
}
|
||||
}
|
||||
|
||||
Future<Event> getEvent() {
|
||||
final roomId = VRouter.of(context).pathParameters['roomid'];
|
||||
final eventId = VRouter.of(context).pathParameters['eventid'];
|
||||
return Matrix.of(context).client.database.getEventById(
|
||||
Matrix.of(context).client.id,
|
||||
eventId,
|
||||
Matrix.of(context).client.getRoomById(roomId),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => ImageViewerView(this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import 'package:famedlysdk/famedlysdk.dart';
|
||||
|
||||
import '../image_viewer.dart';
|
||||
import 'package:fluffychat/widgets/event_content/image_bubble.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -12,72 +10,50 @@ class ImageViewerView extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return FutureBuilder<Event>(
|
||||
future: controller.getEvent(),
|
||||
builder: (context, snapshot) {
|
||||
if (!snapshot.hasData) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.black,
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
backgroundColor: Color(0x44000000),
|
||||
),
|
||||
body: Center(
|
||||
child: snapshot.hasError
|
||||
? Text(
|
||||
L10n.of(context).oopsSomethingWentWrong,
|
||||
style: TextStyle(color: Colors.white),
|
||||
textAlign: TextAlign.center,
|
||||
)
|
||||
: CircularProgressIndicator()),
|
||||
);
|
||||
}
|
||||
final event = snapshot.data;
|
||||
return Scaffold(
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.black,
|
||||
extendBodyBehindAppBar: true,
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.close),
|
||||
onPressed: Navigator.of(context).pop,
|
||||
color: Colors.white,
|
||||
tooltip: L10n.of(context).close,
|
||||
),
|
||||
backgroundColor: Color(0x44000000),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.reply_outlined),
|
||||
onPressed: controller.forwardAction,
|
||||
color: Colors.white,
|
||||
tooltip: L10n.of(context).share,
|
||||
),
|
||||
IconButton(
|
||||
icon: Icon(Icons.download_outlined),
|
||||
onPressed: controller.openFileAction,
|
||||
color: Colors.white,
|
||||
tooltip: L10n.of(context).downloadFile,
|
||||
),
|
||||
],
|
||||
),
|
||||
body: InteractiveViewer(
|
||||
minScale: 1.0,
|
||||
maxScale: 10.0,
|
||||
onInteractionEnd: controller.onInteractionEnds,
|
||||
child: Center(
|
||||
child: ImageBubble(
|
||||
controller.widget.event,
|
||||
tapToView: false,
|
||||
onLoaded: controller.widget.onLoaded,
|
||||
fit: BoxFit.contain,
|
||||
backgroundColor: Colors.black,
|
||||
extendBodyBehindAppBar: true,
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
backgroundColor: Color(0x44000000),
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.close),
|
||||
onPressed: Navigator.of(context, rootNavigator: false).pop,
|
||||
color: Colors.white,
|
||||
tooltip: L10n.of(context).close,
|
||||
),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: Icon(Icons.reply_outlined),
|
||||
onPressed: () => controller.forwardAction(event),
|
||||
color: Colors.white,
|
||||
tooltip: L10n.of(context).share,
|
||||
),
|
||||
IconButton(
|
||||
icon: Icon(Icons.download_outlined),
|
||||
onPressed: () => controller.openFileAction(event),
|
||||
color: Colors.white,
|
||||
tooltip: L10n.of(context).downloadFile,
|
||||
),
|
||||
],
|
||||
),
|
||||
body: InteractiveViewer(
|
||||
minScale: 1.0,
|
||||
maxScale: 10.0,
|
||||
onInteractionEnd: controller.onInteractionEnds,
|
||||
child: Center(
|
||||
child: ImageBubble(
|
||||
event,
|
||||
tapToView: false,
|
||||
onLoaded: controller.widget.onLoaded,
|
||||
fit: BoxFit.contain,
|
||||
backgroundColor: Colors.black,
|
||||
maxSize: false,
|
||||
radius: 0.0,
|
||||
thumbnailOnly: false,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
maxSize: false,
|
||||
radius: 0.0,
|
||||
thumbnailOnly: false,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue