album: improved section headers
This commit is contained in:
parent
10be8b1f2e
commit
4ee06358b9
3 changed files with 35 additions and 9 deletions
|
@ -59,8 +59,6 @@ public class MediaStoreImageProvider {
|
|||
try {
|
||||
Cursor cursor = activity.getContentResolver().query(filesUri, PROJECTION, SELECTION, null, orderBy);
|
||||
if (cursor != null) {
|
||||
Log.d(LOG_TAG, "fetch query returned " + cursor.getCount() + " entries");
|
||||
|
||||
int idColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID);
|
||||
int pathColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
|
||||
int mimeTypeColumn = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.MIME_TYPE);
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
import 'package:aves/common/draggable_scrollbar.dart';
|
||||
import 'package:aves/common/outlined_text.dart';
|
||||
import 'package:aves/thumbnail.dart';
|
||||
import 'package:aves/utils/date_utils.dart';
|
||||
import "package:collection/collection.dart";
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_sticky_header/flutter_sticky_header.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
class ThumbnailCollection extends StatelessWidget {
|
||||
final Map<String, List<Map>> sections;
|
||||
final Map<DateTime, List<Map>> sections;
|
||||
final ScrollController scrollController = ScrollController();
|
||||
|
||||
ThumbnailCollection(List<Map> entries) : sections = groupBy(entries, getDayTaken);
|
||||
|
@ -22,11 +23,9 @@ class ThumbnailCollection extends StatelessWidget {
|
|||
return null;
|
||||
}
|
||||
|
||||
static DateFormat sectionDateFormat = DateFormat('yyyy/MM/dd');
|
||||
|
||||
static String getDayTaken(Map entry) {
|
||||
var date = getBestDate(entry);
|
||||
return date == null ? 'Unknown' : sectionDateFormat.format(date);
|
||||
static DateTime getDayTaken(Map entry) {
|
||||
var d = getBestDate(entry);
|
||||
return d == null ? null : DateTime(d.year, d.month, d.day);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -48,7 +47,7 @@ class ThumbnailCollection extends StatelessWidget {
|
|||
floating: true,
|
||||
),
|
||||
...sections.keys.map((sectionKey) => SliverStickyHeader(
|
||||
header: SectionHeader(sectionKey),
|
||||
header: DaySectionHeader(sectionKey),
|
||||
sliver: SliverGrid(
|
||||
delegate: SliverChildBuilderDelegate(
|
||||
(context, index) {
|
||||
|
@ -72,6 +71,26 @@ class ThumbnailCollection extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
class DaySectionHeader extends StatelessWidget {
|
||||
final String text;
|
||||
|
||||
static DateFormat md = DateFormat.MMMMd();
|
||||
static DateFormat ymd = DateFormat.yMMMMd();
|
||||
|
||||
static formatDate(DateTime date) {
|
||||
if (isToday(date)) return 'Today';
|
||||
if (isThisYear(date)) return md.format(date);
|
||||
return ymd.format(date);
|
||||
}
|
||||
|
||||
DaySectionHeader(DateTime date) : text = formatDate(date);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SectionHeader(text);
|
||||
}
|
||||
}
|
||||
|
||||
class SectionHeader extends StatelessWidget {
|
||||
final String primaryText;
|
||||
|
||||
|
|
9
lib/utils/date_utils.dart
Normal file
9
lib/utils/date_utils.dart
Normal file
|
@ -0,0 +1,9 @@
|
|||
bool isAtSameYearAs(DateTime d1, DateTime d2) => d1 != null && d2 != null && d1.year == d2.year;
|
||||
|
||||
bool isAtSameMonthAs(DateTime d1, DateTime d2) => isAtSameYearAs(d1, d2) && d1.month == d2.month;
|
||||
|
||||
bool isAtSameDayAs(DateTime d1, DateTime d2) => isAtSameMonthAs(d1, d2) && d1.day == d2.day;
|
||||
|
||||
bool isToday(DateTime d) => isAtSameDayAs(d, DateTime.now());
|
||||
|
||||
bool isThisYear(DateTime d) => isAtSameYearAs(d, DateTime.now());
|
Loading…
Reference in a new issue