aves/lib/widgets/collection/draggable_thumb_label.dart
2021-05-13 19:34:23 +09:00

62 lines
2.4 KiB
Dart

import 'package:aves/model/entry.dart';
import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/model/source/collection_source.dart';
import 'package:aves/model/source/enums.dart';
import 'package:aves/utils/file_utils.dart';
import 'package:aves/widgets/common/grid/draggable_thumb_label.dart';
import 'package:aves/widgets/common/grid/section_layout.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class CollectionDraggableThumbLabel extends StatelessWidget {
final CollectionLens collection;
final double offsetY;
const CollectionDraggableThumbLabel({
required this.collection,
required this.offsetY,
});
@override
Widget build(BuildContext context) {
return DraggableThumbLabel<AvesEntry>(
offsetY: offsetY,
lineBuilder: (context, entry) {
switch (collection.sortFactor) {
case EntrySortFactor.date:
switch (collection.groupFactor) {
case EntryGroupFactor.album:
return [
DraggableThumbLabel.formatMonthThumbLabel(context, entry.bestDate),
if (_showAlbumName(context, entry)) _getAlbumName(context, entry),
];
case EntryGroupFactor.month:
case EntryGroupFactor.none:
return [
DraggableThumbLabel.formatMonthThumbLabel(context, entry.bestDate),
];
case EntryGroupFactor.day:
return [
DraggableThumbLabel.formatDayThumbLabel(context, entry.bestDate),
];
}
case EntrySortFactor.name:
return [
if (_showAlbumName(context, entry)) _getAlbumName(context, entry),
if (entry.bestTitle != null) entry.bestTitle!,
];
case EntrySortFactor.size:
return [
if (entry.sizeBytes != null) formatFilesize(entry.sizeBytes!, round: 0),
];
}
},
);
}
bool _hasMultipleSections(BuildContext context) => context.read<SectionedListLayout<AvesEntry>>().sections.length > 1;
bool _showAlbumName(BuildContext context, AvesEntry entry) => _hasMultipleSections(context) && entry.directory != null;
String _getAlbumName(BuildContext context, AvesEntry entry) => context.read<CollectionSource>().getAlbumDisplayName(context, entry.directory!);
}