From a8e52ac18b52351a21c55ef0eca01e31d0b0d03a Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Thu, 9 Dec 2021 17:34:01 +0100 Subject: [PATCH] CacheLoadingScreen: Show the git commit dates Makes it easier to wait --- lib/core/file/file_storage.dart | 19 +++++++++-- lib/screens/cache_loading_screen.dart | 46 +++++++++++++++++++++++++-- pubspec.lock | 2 +- 3 files changed, 61 insertions(+), 6 deletions(-) diff --git a/lib/core/file/file_storage.dart b/lib/core/file/file_storage.dart index a5715dea..6ec496d6 100644 --- a/lib/core/file/file_storage.dart +++ b/lib/core/file/file_storage.dart @@ -4,6 +4,8 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ +import 'package:flutter/foundation.dart'; + import 'package:dart_git/blob_ctime_builder.dart'; import 'package:dart_git/dart_git.dart'; import 'package:dart_git/file_mtime_builder.dart'; @@ -13,17 +15,28 @@ import 'package:universal_io/io.dart' as io; import 'file.dart'; -class FileStorage { +class FileStorage with ChangeNotifier { final String repoPath; final GitRepository gitRepo; final BlobCTimeBuilder blobCTimeBuilder; final FileMTimeBuilder fileMTimeBuilder; - MultiTreeEntryVisitor get visitor => MultiTreeEntryVisitor([ + var _dateTime = DateTime.now(); + DateTime get dateTime => _dateTime; + + TreeEntryVisitor get visitor { + return MultiTreeEntryVisitor( + [ blobCTimeBuilder, fileMTimeBuilder, - ]); + ], + afterCommitCallback: (commit) { + _dateTime = commit.author.date; + notifyListeners(); + }, + ); + } FileStorage({ required this.gitRepo, diff --git a/lib/screens/cache_loading_screen.dart b/lib/screens/cache_loading_screen.dart index 86be1afc..f3ffca7b 100644 --- a/lib/screens/cache_loading_screen.dart +++ b/lib/screens/cache_loading_screen.dart @@ -7,19 +7,53 @@ import 'package:flutter/material.dart'; import 'package:easy_localization/easy_localization.dart'; +import 'package:provider/provider.dart'; +import 'package:gitjournal/core/file/file_storage.dart'; import 'package:gitjournal/generated/locale_keys.g.dart'; +import 'package:gitjournal/repository.dart'; -class CacheLoadingScreen extends StatefulWidget { +class CacheLoadingScreen extends StatelessWidget { const CacheLoadingScreen({Key? key}) : super(key: key); + @override + Widget build(BuildContext context) { + var fileStorage = context.read().fileStorage; + return _CacheLoadingScreen(fileStorage); + } +} + +class _CacheLoadingScreen extends StatefulWidget { + final FileStorage fileStorage; + + const _CacheLoadingScreen(this.fileStorage, {Key? key}) : super(key: key); + @override _CacheLoadingScreenState createState() => _CacheLoadingScreenState(); } -class _CacheLoadingScreenState extends State { +class _CacheLoadingScreenState extends State<_CacheLoadingScreen> { + @override + void initState() { + super.initState(); + widget.fileStorage.addListener(_rebuild); + } + + @override + void dispose() { + widget.fileStorage.removeListener(_rebuild); + super.dispose(); + } + + void _rebuild() { + setState(() {}); + } + @override Widget build(BuildContext context) { + var date = widget.fileStorage.dateTime; + var dateText = date.toIso8601String().substring(0, 10); + var text = LocaleKeys.screens_cacheLoading_text.tr(); var children = [ Padding( @@ -30,6 +64,14 @@ class _CacheLoadingScreenState extends State { style: Theme.of(context).textTheme.headline4, ), ), + Padding( + padding: const EdgeInsets.all(4.0), + child: Text( + dateText, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + ), + ), const SizedBox(height: 8.0), const Padding( padding: EdgeInsets.all(8.0), diff --git a/pubspec.lock b/pubspec.lock index d166f84c..b722c5a2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -328,7 +328,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: "8eca53caed5629f79405b72ba6083eca72d64693" + resolved-ref: "0369ae80dfde703b3a22ade5adf350800d649153" url: "https://github.com/GitJournal/dart-git.git" source: git version: "0.0.2"