import 'dart:io'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:open_file/open_file.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:url_launcher/url_launcher.dart'; class MultiFilesPickerItem extends StatelessWidget { final File file; final bool enabled; final Function(File) onRemoveTap; const MultiFilesPickerItem({Key? key, required this.file, required this.enabled, required this.onRemoveTap}) : super(key: key); @override Widget build(BuildContext context) { bool isImage = file.path.split(".").last.toLowerCase() == "png" || file.path.split(".").last.toLowerCase() == "jpg" || file.path.split(".").last.toLowerCase() == "jpeg"; bool isPdf = file.path.split(".").last.toLowerCase() == "pdf"; bool isExcel = file.path.split(".").last.toLowerCase() == "xlsx"; return SizedBox( width: 54.toScreenWidth, height: 51.toScreenWidth, child: Stack( alignment: AlignmentDirectional.topEnd, children: [ Container( margin: EdgeInsetsDirectional.only(top: 4.toScreenHeight, end: 6.toScreenWidth), decoration: BoxDecoration( color: AppColor.neutral90, border: Border.all(width: 1, color: context.isDark ? AppColor.neutral30 : AppColor.neutral30), image: DecorationImage( image: getImage(isImage, isPdf, isExcel, file), fit: BoxFit.cover, ), borderRadius: BorderRadius.circular(8), ), child: MaterialButton( padding: EdgeInsets.zero, onPressed: () async { if (isImage) { Navigator.of(context).push( MaterialPageRoute( builder: (_) => Scaffold( appBar: const DefaultAppBar(), body: SafeArea( child: InteractiveViewer( child: _isLocalUrl(file.path) ? Image.file(file) : ImageLoader( url: URLs.getFileUrl(file.path), boxFit: BoxFit.cover, ), ).center, ), ), ), ); } else if (_isLocalUrl(file.path)) { OpenFile.open(file.path); } else { if (!await launchUrl(Uri.parse(file.path), mode: LaunchMode.externalApplication)) { Fluttertoast.showToast(msg: "UnExpected Error with file."); throw Exception('Could not launch'); } } }, ), ), if (enabled) InkWell( child: "remove".toSvgAsset(width: 16), onTap: () { onRemoveTap(file); }, ) ], ), ); } ImageProvider getImage(bool isImage, bool isPdf, bool isExcel, File file) { if (isImage) { if (_isLocalUrl(file.path)) { return FileImage(file); } return NetworkImage(URLs.getFileUrl(file.path)!); } return AssetImage("assets/images/${isPdf ? "pdf" : isExcel ? "excel" : "doc"}.png"); } bool _isLocalUrl(String url) { if (url.isEmpty != false) return false; return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); } }