import "dart:typed_data"; import "package:crab_ui/attachmentDownload.dart"; import "package:crab_ui/structs.dart"; import "package:flutter/material.dart"; import 'package:pdfrx/pdfrx.dart'; import 'package:photo_view/photo_view.dart'; class AttachmentWidget extends StatelessWidget { final AttachmentResponse attachment; AttachmentWidget({required this.attachment}); Widget attachmentViewer(AttachmentResponse att) { String extension = att.name .toString() .substring(att.name.toString().indexOf(".") + 1) .toLowerCase(); if (extension == "jpg" || extension == "png") { return Image.memory(att.data); } else if (extension == "pdf") { return PdfViewer.data(Uint8List.fromList(att.data), sourceName: att.name, params: PdfViewerParams( enableTextSelection: true, scrollByMouseWheel: 0.5, annotationRenderingMode: PdfAnnotationRenderingMode.annotationAndForms, )); } return Center( child: Container( padding: EdgeInsets.all(20), decoration: BoxDecoration( color: Color(0xff6C63FF), borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: Colors.black26, blurRadius: 10, ), ], ), child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( "No preview available", style: TextStyle( color: Colors.white, fontSize: 18, decoration: TextDecoration.none), ), SizedBox( height: 5, ), GestureDetector( child: ElevatedButton( child: Row( mainAxisSize: MainAxisSize.min, children: [ Text("Download", style: TextStyle(color: Color(0xff2c3e50)),), Icon(Icons.download, color: Color(0xffb0b0b0),), ]), onPressed: () => Attachmentdownload().saveFile(att), )), ]), )); } @override Widget build(BuildContext context) { return Container( color: Colors.black38, child: Stack(children: [ Container( color: Colors.white, child: Padding( padding: EdgeInsets.fromLTRB(10, 20, 0, 10), child: Column( children: [ Row( children: [ CloseButton(onPressed: () => {Navigator.pop(context)}), Text( attachment.name .toString(), //its alr a string but incase ¯\(ツ)/¯ //update: i did that everywhere lol style: TextStyle( color: Colors.black, fontSize: 20, decoration: TextDecoration .none), //TODO: personalize your fonts ), ], ), Expanded( child: attachmentViewer(attachment), ) ], ), ), ), ])); } }