Browse Source

perf(neon_files): do not use the spread operator for building lists

Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
pull/1094/head
Nikolas Rimikis 1 year ago
parent
commit
84cc5744d1
No known key found for this signature in database
GPG Key ID: 85ED1DE9786A4FF2
  1. 3
      packages/neon/neon_files/lib/dialogs/choose_create.dart
  2. 11
      packages/neon/neon_files/lib/options.dart
  3. 122
      packages/neon/neon_files/lib/pages/details.dart
  4. 9
      packages/neon/neon_files/lib/widgets/actions.dart
  5. 19
      packages/neon/neon_files/lib/widgets/file_list_tile.dart

3
packages/neon/neon_files/lib/dialogs/choose_create.dart

@ -77,7 +77,7 @@ class _FilesChooseCreateDialogState extends State<FilesChooseCreateDialog> {
} }
}, },
), ),
if (NeonPlatform.instance.canUseCamera) ...[ if (NeonPlatform.instance.canUseCamera)
ListTile( ListTile(
leading: Icon( leading: Icon(
MdiIcons.cameraPlus, MdiIcons.cameraPlus,
@ -94,7 +94,6 @@ class _FilesChooseCreateDialogState extends State<FilesChooseCreateDialog> {
} }
}, },
), ),
],
ListTile( ListTile(
leading: Icon( leading: Icon(
MdiIcons.folderPlus, MdiIcons.folderPlus,

11
packages/neon/neon_files/lib/options.dart

@ -67,9 +67,7 @@ class FilesAppSpecificOptions extends NextcloudAppOptions {
label: (final context) => FilesLocalizations.of(context).optionsUploadQueueParallelism, label: (final context) => FilesLocalizations.of(context).optionsUploadQueueParallelism,
defaultValue: 4, defaultValue: 4,
values: { values: {
for (var i = 1; i <= 16; i = i * 2) ...{ for (var i = 1; i <= 16; i = i * 2) i: (final _) => i.toString(),
i: (final _) => i.toString(),
},
}, },
); );
@ -80,9 +78,7 @@ class FilesAppSpecificOptions extends NextcloudAppOptions {
label: (final context) => FilesLocalizations.of(context).optionsDownloadQueueParallelism, label: (final context) => FilesLocalizations.of(context).optionsDownloadQueueParallelism,
defaultValue: 4, defaultValue: 4,
values: { values: {
for (var i = 1; i <= 16; i = i * 2) ...{ for (var i = 1; i <= 16; i = i * 2) i: (final _) => i.toString(),
i: (final _) => i.toString(),
},
}, },
); );
@ -96,9 +92,8 @@ class FilesAppSpecificOptions extends NextcloudAppOptions {
2 * 2024, 2 * 2024,
6 * 1024, 6 * 1024,
10 * 1024, 10 * 1024,
]) ...{ ])
_mb(i): (final _) => filesize(_mb(i)), _mb(i): (final _) => filesize(_mb(i)),
},
}; };
int _mb(final int i) => i * 1024 * 1024; int _mb(final int i) => i * 1024 * 1024;

122
packages/neon/neon_files/lib/pages/details.dart

@ -11,66 +11,72 @@ class FilesDetailsPage extends StatelessWidget {
final FileDetails details; final FileDetails details;
@override @override
Widget build(final BuildContext context) => Scaffold( Widget build(final BuildContext context) {
resizeToAvoidBottomInset: false, final l10n = FilesLocalizations.of(context);
appBar: AppBar(
title: Text(details.name), return Scaffold(
), resizeToAvoidBottomInset: false,
body: SafeArea( appBar: AppBar(
child: ListView( title: Text(details.name),
primary: true, ),
children: [ body: SafeArea(
ColoredBox( child: ListView(
color: Theme.of(context).colorScheme.primary, primary: true,
child: FilePreview( children: [
bloc: bloc, ColoredBox(
details: details, color: Theme.of(context).colorScheme.primary,
color: Theme.of(context).colorScheme.onPrimary, child: FilePreview(
size: Size( bloc: bloc,
MediaQuery.of(context).size.width, details: details,
MediaQuery.of(context).size.height / 4, color: Theme.of(context).colorScheme.onPrimary,
), size: Size(
MediaQuery.of(context).size.width,
MediaQuery.of(context).size.height / 4,
), ),
), ),
DataTable( ),
headingRowHeight: 0, DataTable(
columns: const [ headingRowHeight: 0,
DataColumn(label: SizedBox()), columns: const [
DataColumn(label: SizedBox()), DataColumn(label: SizedBox()),
], DataColumn(label: SizedBox()),
rows: [ ],
for (final entry in { rows: [
details.isDirectory _buildDataRow(
? FilesLocalizations.of(context).detailsFolderName details.isDirectory ? l10n.detailsFolderName : l10n.detailsFileName,
: FilesLocalizations.of(context).detailsFileName: details.name, details.name,
FilesLocalizations.of(context).detailsParentFolder: ),
details.path.length == 1 ? '/' : details.path.sublist(0, details.path.length - 1).join('/'), _buildDataRow(
if (details.size != null) ...{ l10n.detailsParentFolder,
details.isDirectory details.path.length == 1 ? '/' : details.path.sublist(0, details.path.length - 1).join('/'),
? FilesLocalizations.of(context).detailsFolderSize ),
: FilesLocalizations.of(context).detailsFileSize: filesize(details.size, 1), if (details.size != null)
}, _buildDataRow(
if (details.lastModified != null) ...{ details.isDirectory ? l10n.detailsFolderSize : l10n.detailsFileSize,
FilesLocalizations.of(context).detailsLastModified: filesize(details.size, 1),
details.lastModified!.toLocal().toIso8601String(), ),
}, if (details.lastModified != null)
if (details.isFavorite != null) ...{ _buildDataRow(
FilesLocalizations.of(context).detailsIsFavorite: details.isFavorite! l10n.detailsLastModified,
? FilesLocalizations.of(context).actionYes details.lastModified!.toLocal().toIso8601String(),
: FilesLocalizations.of(context).actionNo, ),
}, if (details.isFavorite != null)
}.entries) ...[ _buildDataRow(
DataRow( l10n.detailsIsFavorite,
cells: [ details.isFavorite! ? l10n.actionYes : l10n.actionNo,
DataCell(Text(entry.key)), ),
DataCell(Text(entry.value)), ],
], ),
), ],
],
],
),
],
),
), ),
),
);
}
DataRow _buildDataRow(final String key, final String value) => DataRow(
cells: [
DataCell(Text(key)),
DataCell(Text(value)),
],
); );
} }

9
packages/neon/neon_files/lib/widgets/actions.dart

@ -119,13 +119,12 @@ class FileActions extends StatelessWidget {
@override @override
Widget build(final BuildContext context) => PopupMenuButton<FilesFileAction>( Widget build(final BuildContext context) => PopupMenuButton<FilesFileAction>(
itemBuilder: (final context) => [ itemBuilder: (final context) => [
if (!details.isDirectory && NeonPlatform.instance.canUseSharing) ...[ if (!details.isDirectory && NeonPlatform.instance.canUseSharing)
PopupMenuItem( PopupMenuItem(
value: FilesFileAction.share, value: FilesFileAction.share,
child: Text(FilesLocalizations.of(context).actionShare), child: Text(FilesLocalizations.of(context).actionShare),
), ),
], if (details.isFavorite != null)
if (details.isFavorite != null) ...[
PopupMenuItem( PopupMenuItem(
value: FilesFileAction.toggleFavorite, value: FilesFileAction.toggleFavorite,
child: Text( child: Text(
@ -134,7 +133,6 @@ class FileActions extends StatelessWidget {
: FilesLocalizations.of(context).addToFavorites, : FilesLocalizations.of(context).addToFavorites,
), ),
), ),
],
PopupMenuItem( PopupMenuItem(
value: FilesFileAction.details, value: FilesFileAction.details,
child: Text(FilesLocalizations.of(context).details), child: Text(FilesLocalizations.of(context).details),
@ -152,12 +150,11 @@ class FileActions extends StatelessWidget {
child: Text(FilesLocalizations.of(context).actionCopy), child: Text(FilesLocalizations.of(context).actionCopy),
), ),
// TODO: https://github.com/provokateurin/nextcloud-neon/issues/4 // TODO: https://github.com/provokateurin/nextcloud-neon/issues/4
if (!details.isDirectory) ...[ if (!details.isDirectory)
PopupMenuItem( PopupMenuItem(
value: FilesFileAction.sync, value: FilesFileAction.sync,
child: Text(FilesLocalizations.of(context).actionSync), child: Text(FilesLocalizations.of(context).actionSync),
), ),
],
PopupMenuItem( PopupMenuItem(
value: FilesFileAction.delete, value: FilesFileAction.delete,
child: Text(FilesLocalizations.of(context).actionDelete), child: Text(FilesLocalizations.of(context).actionDelete),

19
packages/neon/neon_files/lib/widgets/file_list_tile.dart

@ -56,17 +56,16 @@ class FileListTile extends StatelessWidget {
RelativeTime( RelativeTime(
date: details.lastModified!, date: details.lastModified!,
), ),
if (details.size != null && details.size! > 0) ...[ if (details.size != null && details.size! > 0)
const SizedBox( Padding(
width: 10, padding: const EdgeInsets.only(left: 10),
child: Text(
filesize(details.size, 1),
style: DefaultTextStyle.of(context).style.copyWith(
color: Colors.grey,
),
),
), ),
Text(
filesize(details.size, 1),
style: DefaultTextStyle.of(context).style.copyWith(
color: Colors.grey,
),
),
],
], ],
), ),
leading: _FileIcon( leading: _FileIcon(

Loading…
Cancel
Save