Display memories from previous years

This commit is contained in:
Vishnu Mohandas 2020-07-21 15:55:19 +05:30
parent 5424eb01f5
commit 755664a8de
6 changed files with 141 additions and 26 deletions

View file

@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:collection';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@ -16,6 +15,7 @@ import 'package:photos/ui/gallery.dart';
import 'package:photos/ui/gallery_app_bar_widget.dart';
import 'package:photos/ui/loading_photos_widget.dart';
import 'package:photos/ui/loading_widget.dart';
import 'package:photos/ui/memories_widget.dart';
import 'package:photos/ui/remote_folder_gallery_widget.dart';
import 'package:photos/ui/search_page.dart';
import 'package:photos/utils/logging_util.dart';
@ -114,6 +114,7 @@ class _HomeWidgetState extends State<HomeWidget> {
onRefresh: PhotoSyncManager.instance.sync,
tagPrefix: "home_gallery",
selectedFiles: _selectedFiles,
headerWidget: MemoriesWidget(),
);
} else if (snapshot.hasError) {
return Center(child: Text(snapshot.error.toString()));

View file

@ -1,17 +1,15 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_swiper/flutter_swiper.dart';
import 'package:photos/memory_service.dart';
import 'package:photos/models/file_type.dart';
import 'package:photos/models/memory.dart';
import 'package:photos/ui/thumbnail_widget.dart';
import 'package:photos/ui/video_widget.dart';
import 'package:photos/ui/zoomable_image.dart';
import 'package:photos/utils/date_time_util.dart';
class MemoriesWidget extends StatefulWidget {
MemoriesWidget({Key key}) : super(key: key);
@override
_MemoriesWidgetState createState() => _MemoriesWidgetState();
}
class _MemoriesWidgetState extends State<MemoriesWidget> {
class MemoriesWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Memory>>(
@ -75,23 +73,37 @@ class MemoryWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
width: 100,
height: 120,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
ClipOval(
child: Container(
width: 76,
height: 76,
child: ThumbnailWidget(memories[0].file),
return GestureDetector(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
return FullScreenMemory(memories);
},
),
);
},
child: Container(
width: 100,
height: 120,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
ClipOval(
child: Container(
width: 76,
height: 76,
child: Hero(
tag: "memories" + memories[0].file.tag(),
child: ThumbnailWidget(memories[0].file),
),
),
),
),
Padding(padding: EdgeInsets.all(2)),
_getTitle(memories[0]),
],
Padding(padding: EdgeInsets.all(2)),
_getTitle(memories[0]),
],
),
),
),
);
@ -108,3 +120,56 @@ class MemoryWidget extends StatelessWidget {
}
}
}
class FullScreenMemory extends StatefulWidget {
final List<Memory> memories;
FullScreenMemory(this.memories, {Key key}) : super(key: key);
@override
_FullScreenMemoryState createState() => _FullScreenMemoryState();
}
class _FullScreenMemoryState extends State<FullScreenMemory> {
@override
Widget build(BuildContext context) {
return Material(
type: MaterialType.transparency,
child: Container(
child: new Swiper(
itemBuilder: (BuildContext context, int index) {
final file = widget.memories[index].file;
return Stack(children: [
file.fileType == FileType.image
? ZoomableImage(
file,
tagPrefix: "memories",
)
: VideoWidget(file, tagPrefix: "memories"),
Padding(
padding: const EdgeInsets.fromLTRB(16, 40, 16, 16),
child: Text(
getFormattedDate(
DateTime.fromMicrosecondsSinceEpoch(file.creationTime)),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
)
]);
},
itemCount: widget.memories.length,
pagination: new SwiperPagination(
builder: DotSwiperPaginationBuilder(activeColor: Colors.white)),
control: new SwiperControl(),
loop: false,
autoplay: true,
autoplayDelay: 5000,
autoplayDisableOnInteraction: true,
layout: SwiperLayout.DEFAULT,
),
),
);
}
}

View file

@ -18,7 +18,7 @@ class ZoomableImage extends StatefulWidget {
this.photo, {
Key key,
this.shouldDisableScroll,
this.tagPrefix,
@required this.tagPrefix,
}) : super(key: key);
@override

View file

@ -65,6 +65,16 @@ String getFormattedTime(DateTime dateTime) {
getTime(dateTime);
}
String getFormattedDate(DateTime dateTime) {
return getDay(dateTime) +
", " +
getMonth(dateTime) +
" " +
dateTime.day.toString() +
", " +
dateTime.year.toString();
}
String formatDuration(Duration position) {
final ms = position.inMilliseconds;
@ -87,3 +97,20 @@ String formatDuration(Duration position) {
return formattedTime;
}
bool isLeapYear(DateTime dateTime) {
final year = dateTime.year;
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0) {
return true;
} else {
return false;
}
} else {
return true;
}
} else {
return false;
}
}

View file

@ -223,6 +223,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.5"
flutter_page_indicator:
dependency: transitive
description:
name: flutter_page_indicator
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.3"
flutter_swiper:
dependency: "direct main"
description:
name: flutter_swiper
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
flutter_test:
dependency: "direct dev"
description: flutter
@ -574,6 +588,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.17"
transformer_page_view:
dependency: transitive
description:
name: transformer_page_view
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.6"
typed_data:
dependency: transitive
description:

View file

@ -54,6 +54,7 @@ dependencies:
chewie: ^0.9.10
cached_network_image: ^2.3.0-beta
progress_dialog: ^1.2.4
flutter_swiper: ^1.1.6
dev_dependencies:
flutter_test: