diff --git a/lib/pages/chat/events/message_download_content.dart b/lib/pages/chat/events/message_download_content.dart index 8a1db2cf..ccf389e5 100644 --- a/lib/pages/chat/events/message_download_content.dart +++ b/lib/pages/chat/events/message_download_content.dart @@ -1,42 +1,75 @@ +//@dart=2.12 + import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions.dart/event_extension.dart'; -import 'package:fluffychat/widgets/matrix.dart'; class MessageDownloadContent extends StatelessWidget { final Event event; final Color textColor; - const MessageDownloadContent(this.event, this.textColor, {Key key}) + const MessageDownloadContent(this.event, this.textColor, {Key? key}) : super(key: key); @override Widget build(BuildContext context) { - final String filename = event.content.containsKey('filename') - ? event.content['filename'] - : event.body; - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - TextButton.icon( - onPressed: () => event.saveFile(context), - icon: const Icon(Icons.download_outlined), - label: Text(filename), - style: event.senderId == Matrix.of(context).client.userID - ? TextButton.styleFrom(primary: textColor) - : null, - ), - if (event.sizeString != null) - Text( - event.sizeString, - style: TextStyle( - color: textColor, - ), + final filename = event.content.tryGet('filename') ?? event.body; + final filetype = (filename.contains('.') + ? filename.split('.').last.toUpperCase() + : event.content + .tryGetMap('info') + ?.tryGet('mimetype') + ?.toUpperCase() ?? + 'UNKNOWN'); + final sizeString = event.sizeString; + return InkWell( + onTap: () => event.saveFile(context), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + children: [ + Icon( + Icons.file_download_outlined, + color: Theme.of(context).colorScheme.secondary, + ), + const SizedBox(width: 8), + Expanded( + child: Text( + filename, + maxLines: 1, + style: TextStyle( + color: Theme.of(context).colorScheme.secondary, + fontWeight: FontWeight.bold, + ), + ), + ), + ], ), - ], + const Divider(), + Row( + children: [ + Text( + filetype, + style: TextStyle( + color: textColor, + ), + ), + const Spacer(), + if (sizeString != null) + Text( + sizeString, + style: TextStyle( + color: textColor, + ), + ), + ], + ), + ], + ), ); } }