Add file card
This commit is contained in:
parent
613e74ea33
commit
2344ed887d
3 changed files with 61 additions and 2 deletions
22
lib/helpers/extensions/size_to_string.dart
Normal file
22
lib/helpers/extensions/size_to_string.dart
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||||
|
|
||||||
|
extension SizeToString on int {
|
||||||
|
String get sizeAsString {
|
||||||
|
const IListConst<String> suffixes = IListConst([
|
||||||
|
"B",
|
||||||
|
"KB",
|
||||||
|
"MB",
|
||||||
|
"GB",
|
||||||
|
"TB",
|
||||||
|
"PB",
|
||||||
|
]);
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
var size = toDouble();
|
||||||
|
while (size > 1024 && i < suffixes.length - 1) {
|
||||||
|
size /= 1024;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return "${size.toStringAsFixed(2)} ${suffixes[i]}";
|
||||||
|
}
|
||||||
|
}
|
||||||
29
lib/widgets/file_card.dart
Normal file
29
lib/widgets/file_card.dart
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
import "package:flutter/material.dart";
|
||||||
|
import "package:nexus/helpers/extensions/size_to_string.dart";
|
||||||
|
import "package:nexus/models/info/file.dart";
|
||||||
|
|
||||||
|
class FileCard extends StatelessWidget {
|
||||||
|
final Uri uri;
|
||||||
|
final FileInfo? info;
|
||||||
|
final String? filename;
|
||||||
|
const FileCard(this.uri, this.info, {this.filename, super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => SizedBox(
|
||||||
|
width: 320,
|
||||||
|
child: Card(
|
||||||
|
color: Theme.of(context).colorScheme.surfaceContainer,
|
||||||
|
child: ListTile(
|
||||||
|
leading: Icon(Icons.file_copy),
|
||||||
|
title: Text(
|
||||||
|
filename ?? "file",
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
subtitle: info?.size == null ? null : Text(info!.size!.sizeAsString),
|
||||||
|
// TODO: Downloading files
|
||||||
|
trailing: IconButton(onPressed: null, icon: Icon(Icons.download)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -26,6 +26,7 @@ import "package:nexus/widgets/loading.dart";
|
||||||
import "package:nexus/widgets/players/video.dart";
|
import "package:nexus/widgets/players/video.dart";
|
||||||
import "package:nexus/widgets/players/audio.dart";
|
import "package:nexus/widgets/players/audio.dart";
|
||||||
import "package:nexus/widgets/renderers/membership.dart";
|
import "package:nexus/widgets/renderers/membership.dart";
|
||||||
|
import "package:nexus/widgets/file_card.dart";
|
||||||
import "package:timeago/timeago.dart";
|
import "package:timeago/timeago.dart";
|
||||||
import "package:flutter_linkify/flutter_linkify.dart";
|
import "package:flutter_linkify/flutter_linkify.dart";
|
||||||
|
|
||||||
|
|
@ -238,8 +239,15 @@ class EventRenderer extends ConsumerWidget {
|
||||||
:final info,
|
:final info,
|
||||||
) =>
|
) =>
|
||||||
AudioPlayer(url, info),
|
AudioPlayer(url, info),
|
||||||
// FileMessageContent(:final info) =>
|
FileMessageContent(
|
||||||
// FileRenderer(url, info),
|
:final info,
|
||||||
|
:final filename,
|
||||||
|
) =>
|
||||||
|
FileCard(
|
||||||
|
url,
|
||||||
|
info,
|
||||||
|
filename: filename,
|
||||||
|
),
|
||||||
ImageMessageContent(:final info) => ExpandableImage(
|
ImageMessageContent(:final info) => ExpandableImage(
|
||||||
url.toString(),
|
url.toString(),
|
||||||
child: ClipRRect(
|
child: ClipRRect(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue