67 lines
2.3 KiB
Dart
67 lines
2.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:material_symbols_icons/symbols.dart';
|
|
import 'package:styled_widget/styled_widget.dart';
|
|
|
|
import '../models/file.dart';
|
|
import '../widgets/content/cloud_files.dart';
|
|
|
|
/// Returns an appropriate icon widget for the given file based on its MIME type
|
|
Widget getFileIcon(
|
|
SnCloudFile file, {
|
|
required double size,
|
|
bool tinyPreview = true,
|
|
}) {
|
|
final itemType = file.mimeType?.split('/').firstOrNull;
|
|
final mimeType = file.mimeType ?? '';
|
|
final extension = file.name.split('.').lastOrNull?.toLowerCase() ?? '';
|
|
|
|
// For images, show the actual image thumbnail
|
|
if (itemType == 'image' && tinyPreview) {
|
|
return CloudImageWidget(file: file);
|
|
}
|
|
|
|
// Return icon based on MIME type or file extension
|
|
final icon = switch ((itemType, mimeType, extension)) {
|
|
('image', _, _) => Symbols.image,
|
|
('audio', _, _) => Symbols.audio_file,
|
|
('video', _, _) => Symbols.video_file,
|
|
('application', 'application/pdf', _) => Symbols.picture_as_pdf,
|
|
('application', 'application/zip', _) => Symbols.archive,
|
|
('application', 'application/x-rar-compressed', _) => Symbols.archive,
|
|
(
|
|
'application',
|
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
_,
|
|
) ||
|
|
('application', 'application/msword', _) => Symbols.description,
|
|
(
|
|
'application',
|
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
_,
|
|
) ||
|
|
('application', 'application/vnd.ms-excel', _) => Symbols.table_chart,
|
|
(
|
|
'application',
|
|
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
_,
|
|
) ||
|
|
('application', 'application/vnd.ms-powerpoint', _) => Symbols.slideshow,
|
|
('text', _, _) => Symbols.article,
|
|
('application', _, 'js') ||
|
|
('application', _, 'dart') ||
|
|
('application', _, 'py') ||
|
|
('application', _, 'java') ||
|
|
('application', _, 'cpp') ||
|
|
('application', _, 'c') ||
|
|
('application', _, 'cs') => Symbols.code,
|
|
('application', _, 'json') ||
|
|
('application', _, 'xml') => Symbols.data_object,
|
|
(_, _, 'md') => Symbols.article,
|
|
(_, _, 'html') => Symbols.web,
|
|
(_, _, 'css') => Symbols.css,
|
|
_ => Symbols.description, // Default icon
|
|
};
|
|
|
|
return Icon(icon, size: size, fill: 1).center();
|
|
}
|