Settings Screen: Actually save the gitAuthor + email

There is too much code duplication over here, but - meh - I'll clean it
up later.
This commit is contained in:
Vishesh Handa
2019-02-09 16:12:47 +01:00
parent 2793ae90ad
commit c7915d8feb
5 changed files with 84 additions and 24 deletions

View File

@ -3,7 +3,7 @@ import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:journal/apis/git.dart';
import 'package:journal/settings.dart';
import 'package:path/path.dart' as p;
//
@ -34,8 +34,8 @@ Future migrateGitRepo({
await gitAdd(toGitBasePath, fileName);
await gitCommit(
gitFolder: toGitBasePath,
authorEmail: "app@gitjournal.io",
authorName: "GitJournal",
authorEmail: Settings.instance.gitAuthorEmail,
authorName: Settings.instance.gitAuthor,
message: "Migrated Journal Entry",
);
}

View File

@ -1,12 +1,12 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_crashlytics/flutter_crashlytics.dart';
import 'package:journal/app.dart';
import 'package:journal/state_container.dart';
import 'package:journal/apis/git.dart';
import 'package:journal/app.dart';
import 'package:journal/settings.dart';
import 'package:journal/state_container.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() async {
bool isInDebugMode = true;
@ -58,6 +58,8 @@ Future runJournalApp() async {
var dir = await getGitBaseDirectory();
await Settings.instance.load();
runApp(new StateContainer(
localGitRepoConfigured: localGitRepoConfigured,
remoteGitRepoConfigured: remoteGitRepoConfigured,

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:package_info/package_info.dart';
import 'package:journal/app.dart';
import 'package:journal/settings.dart';
import 'package:package_info/package_info.dart';
class SettingsScreen extends StatelessWidget {
@override
@ -29,10 +29,14 @@ class SettingsList extends StatefulWidget {
}
class SettingsListState extends State<SettingsList> {
final gitAuthorKey = GlobalKey<FormFieldState<String>>();
final gitAuthorEmailKey = GlobalKey<FormFieldState<String>>();
@override
Widget build(BuildContext context) {
var gitAuthorForm = Form(
child: TextFormField(
key: gitAuthorKey,
style: Theme.of(context).textTheme.title,
decoration: const InputDecoration(
icon: Icon(Icons.person),
@ -46,14 +50,27 @@ class SettingsListState extends State<SettingsList> {
}
},
textInputAction: TextInputAction.done,
onFieldSubmitted: (String _) {},
initialValue:
JournalApp.preferences.getString("gitAuthor") ?? "GitJournal",
onFieldSubmitted: (String gitAuthor) {
Settings.instance.gitAuthor = gitAuthor;
Settings.instance.save();
},
onSaved: (String gitAuthor) {
Settings.instance.gitAuthor = gitAuthor;
Settings.instance.save();
},
initialValue: Settings.instance.gitAuthor,
),
onChanged: () {
if (!gitAuthorKey.currentState.validate()) return;
var gitAuthor = gitAuthorKey.currentState.value;
Settings.instance.gitAuthor = gitAuthor;
Settings.instance.save();
},
);
var gitAuthorEmailForm = Form(
child: TextFormField(
key: gitAuthorEmailKey,
style: Theme.of(context).textTheme.title,
decoration: const InputDecoration(
icon: Icon(Icons.email),
@ -65,12 +82,30 @@ class SettingsListState extends State<SettingsList> {
if (value.isEmpty) {
return 'Please enter an email';
}
bool emailValid =
RegExp(r"^[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(value);
if (!emailValid) {
return 'Please enter a valid email';
}
},
textInputAction: TextInputAction.done,
onFieldSubmitted: (String _) {},
initialValue: JournalApp.preferences.getString("gitAuthorEmail") ??
"app@gitjournal.io",
onFieldSubmitted: (String gitAuthorEmail) {
Settings.instance.gitAuthorEmail = gitAuthorEmail;
Settings.instance.save();
},
onSaved: (String gitAuthorEmail) {
Settings.instance.gitAuthorEmail = gitAuthorEmail;
Settings.instance.save();
},
initialValue: Settings.instance.gitAuthorEmail,
),
onChanged: () {
if (!gitAuthorEmailKey.currentState.validate()) return;
var gitAuthorEmail = gitAuthorEmailKey.currentState.value;
Settings.instance.gitAuthorEmail = gitAuthorEmail;
Settings.instance.save();
},
);
var listView = ListView(children: <Widget>[

24
lib/settings.dart Normal file
View File

@ -0,0 +1,24 @@
import 'package:shared_preferences/shared_preferences.dart';
class Settings {
// singleton
static final Settings _singleton = Settings._internal();
factory Settings() => _singleton;
Settings._internal();
static Settings get instance => _singleton;
Future load() async {
var pref = await SharedPreferences.getInstance();
gitAuthor = pref.getString("gitAuthor") ?? gitAuthor;
gitAuthorEmail = pref.getString("gitAuthorEmail") ?? gitAuthorEmail;
}
Future save() async {
var pref = await SharedPreferences.getInstance();
pref.setString("gitAuthor", gitAuthor);
pref.setString("gitAuthorEmail", gitAuthorEmail);
}
String gitAuthor = "GitJournal";
String gitAuthorEmail = "app@gitjournal.io";
}

View File

@ -1,17 +1,16 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:path/path.dart' as p;
import 'package:journal/note.dart';
import 'package:journal/apis/git.dart';
import 'package:journal/storage/serializers.dart';
import 'package:journal/note.dart';
import 'package:journal/settings.dart';
import 'package:journal/storage/file_storage.dart';
import 'package:journal/storage/notes_repository.dart';
import 'package:journal/storage/serializers.dart';
import 'package:path/path.dart' as p;
class GitNoteRepository implements NoteRepository {
final FileStorage _fileStorage;
//final String gitCloneUrl = "";
final String dirName;
bool cloned = false;
@ -42,8 +41,8 @@ class GitNoteRepository implements NoteRepository {
await gitAdd(this.dirName, filePath);
await gitCommit(
gitFolder: this.dirName,
authorEmail: "app@gitjournal.io",
authorName: "GitJournal",
authorEmail: Settings.instance.gitAuthorEmail,
authorName: Settings.instance.gitAuthor,
message: commitMessage,
);
@ -64,8 +63,8 @@ class GitNoteRepository implements NoteRepository {
await gitRm(this.dirName, filePath);
await gitCommit(
gitFolder: this.dirName,
authorEmail: "app@gitjournal.io",
authorName: "GitJournal",
authorEmail: Settings.instance.gitAuthorEmail,
authorName: Settings.instance.gitAuthor,
message: "Removed Journal entry",
);