Add experimental history

This commit is contained in:
Vishesh Handa
2021-09-13 17:10:08 +02:00
parent 08283c7d11
commit e2d391ec02
6 changed files with 99 additions and 0 deletions

View File

@ -382,6 +382,7 @@ drawer:
folders: Folders
fs: File System
graph: Graph View
history: History
tags: Tags
share: Share App
rate: Rate Us

View File

@ -9,6 +9,7 @@ import 'package:gitjournal/logger/logger.dart';
import 'package:gitjournal/repository.dart';
import 'package:gitjournal/screens/folder_listing.dart';
import 'package:gitjournal/screens/graph_view.dart';
import 'package:gitjournal/screens/history_screen.dart';
import 'package:gitjournal/screens/home_screen.dart';
import 'package:gitjournal/screens/note_editor.dart';
import 'package:gitjournal/screens/onboarding_screens.dart';
@ -43,6 +44,7 @@ class AppRoute {
SetupRemoteGit,
Purchase,
PurchaseThank,
HistoryScreen.routePath,
];
}
@ -141,6 +143,8 @@ class AppRouter {
return PurchaseScreen();
case AppRoute.PurchaseThank:
return PurchaseThankYouScreen();
case HistoryScreen.routePath:
return const HistoryScreen();
}
if (route.startsWith('/newNote/')) {

View File

@ -536,6 +536,7 @@ abstract class LocaleKeys {
static const drawer_folders = 'drawer.folders';
static const drawer_fs = 'drawer.fs';
static const drawer_graph = 'drawer.graph';
static const drawer_history = 'drawer.history';
static const drawer_tags = 'drawer.tags';
static const drawer_share = 'drawer.share';
static const drawer_rate = 'drawer.rate';

View File

@ -0,0 +1,82 @@
import 'package:flutter/material.dart';
import 'package:dart_git/git.dart';
import 'package:dart_git/plumbing/commit_iterator.dart';
import 'package:dart_git/plumbing/objects/commit.dart';
import 'package:provider/provider.dart';
import 'package:gitjournal/repository.dart';
import 'package:gitjournal/widgets/future_builder_with_progress.dart';
class HistoryScreen extends StatelessWidget {
static const String routePath = "/history";
const HistoryScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: const HistoryWidget(),
);
}
}
class HistoryWidget extends StatefulWidget {
const HistoryWidget({Key? key}) : super(key: key);
@override
_HistoryWidgetState createState() => _HistoryWidgetState();
}
class _HistoryWidgetState extends State<HistoryWidget> {
List<GitCommit> commits = [];
Stream<Result<GitCommit>>? _stream;
@override
void initState() {
super.initState();
}
Future<Stream<Result<GitCommit>>> _initStream() async {
var gjRepo = Provider.of<GitJournalRepo>(context);
var repo = await GitRepository.load(gjRepo.gitBaseDirectory).getOrThrow();
return commitPreOrderIterator(
objStorage: repo.objStorage,
from: await repo.headCommit().getOrThrow(),
);
}
@override
Widget build(BuildContext context) {
return FutureBuilderWithProgress(
future: () async {
_stream = await _initStream();
return ListView.builder(
itemBuilder: (BuildContext context, int i) {
return FutureBuilderWithProgress(future: _buildTile(context, i));
},
);
}(),
);
}
Future<Widget> _buildTile(BuildContext context, int i) async {
var stream = _stream!;
// Put in a lock!
if (i >= commits.length) {
for (var j = 0; j < (commits.length - i).abs() + 1; j++) {
await for (var commit in stream) {
commits.add(commit.getOrThrow());
break;
}
}
}
var commit = commits[i];
return Text(commit.message);
}
}

View File

@ -48,6 +48,8 @@ class AppSettings extends ChangeNotifier {
var experimentalGitMerge = false;
var experimentalGitOps = false;
var experimentalHistory = false;
void load(SharedPreferences pref) {
onBoardingCompleted = pref.getBool("onBoardingCompleted") ?? false;

View File

@ -188,6 +188,15 @@ class _AppDrawerState extends State<AppDrawer>
onTap: () => _navTopLevel(context, '/graph'),
selected: currentRoute == "/graph",
),
if (appSettings.experimentalHistory)
_buildDrawerTile(
context,
icon: Icons.history,
isFontAwesome: true,
title: tr(LocaleKeys.drawer_history),
onTap: () => _navTopLevel(context, '/history'),
selected: currentRoute == "/history",
),
_buildDrawerTile(
context,
icon: FontAwesomeIcons.tag,