Always check if a Folder exists before accessing it

This kinds of bugs will be less frequent once we have non null by
default enabled in Flutter.

Fixes #164
This commit is contained in:
Vishesh Handa
2020-07-31 21:16:36 +02:00
parent 8e8c11c5ef
commit 8ab7ec22c4
4 changed files with 38 additions and 15 deletions

View File

@ -6,6 +6,7 @@ import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/screens/settings_screen.dart'; import 'package:gitjournal/screens/settings_screen.dart';
import 'package:gitjournal/screens/settings_widgets.dart'; import 'package:gitjournal/screens/settings_widgets.dart';
import 'package:gitjournal/settings.dart'; import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils.dart';
import 'package:gitjournal/widgets/folder_selection_dialog.dart'; import 'package:gitjournal/widgets/folder_selection_dialog.dart';
import 'package:gitjournal/widgets/pro_overlay.dart'; import 'package:gitjournal/widgets/pro_overlay.dart';
@ -22,6 +23,15 @@ class SettingsEditorsScreenState extends State<SettingsEditorsScreen> {
Settings.instance.journalEditordefaultNewNoteFolderSpec; Settings.instance.journalEditordefaultNewNoteFolderSpec;
if (defaultNewFolder.isEmpty) { if (defaultNewFolder.isEmpty) {
defaultNewFolder = tr("rootFolder"); defaultNewFolder = tr("rootFolder");
} else {
if (!folderWithSpecExists(context, defaultNewFolder)) {
setState(() {
defaultNewFolder = tr("rootFolder");
Settings.instance.journalEditordefaultNewNoteFolderSpec = "";
Settings.instance.save();
});
}
} }
var body = ListView(children: <Widget>[ var body = ListView(children: <Widget>[

View File

@ -21,6 +21,12 @@ class SettingsImagesScreenState extends State<SettingsImagesScreen> {
var folder = Provider.of<NotesFolderFS>(context) var folder = Provider.of<NotesFolderFS>(context)
.getFolderWithSpec(settings.imageLocationSpec); .getFolderWithSpec(settings.imageLocationSpec);
// If the Custom Folder specified no longer exists
if (settings.imageLocationSpec != "." && folder == null) {
Settings.instance.imageLocationSpec = ".";
Settings.instance.save();
}
var sameFolder = tr("settings.images.currentFolder"); var sameFolder = tr("settings.images.currentFolder");
var customFolder = tr("settings.images.customFolder"); var customFolder = tr("settings.images.customFolder");
@ -72,15 +78,3 @@ class SettingsImagesScreenState extends State<SettingsImagesScreen> {
); );
} }
} }
//
// Options to expose
// - Image Location
// - Note Directory
// - Custom Directory
// Bool use relative path if possible
// - Image FileName
// - Original Name
// - Note FileName + _num
// - Custom Name
//

View File

@ -134,6 +134,15 @@ class SettingsListState extends State<SettingsList> {
var defaultNewFolder = Settings.instance.defaultNewNoteFolderSpec; var defaultNewFolder = Settings.instance.defaultNewNoteFolderSpec;
if (defaultNewFolder.isEmpty) { if (defaultNewFolder.isEmpty) {
defaultNewFolder = tr("rootFolder"); defaultNewFolder = tr("rootFolder");
} else {
if (!folderWithSpecExists(context, defaultNewFolder)) {
setState(() {
defaultNewFolder = tr("rootFolder");
Settings.instance.defaultNewNoteFolderSpec = "";
Settings.instance.save();
});
}
} }
return ListView(children: [ return ListView(children: [

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:package_info/package_info.dart'; import 'package:package_info/package_info.dart';
import 'package:provider/provider.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
@ -50,14 +51,16 @@ NotesFolderFS getFolderForEditor(
EditorType editorType, EditorType editorType,
) { ) {
var spec = Settings.instance.defaultNewNoteFolderSpec; var spec = Settings.instance.defaultNewNoteFolderSpec;
var journalSpec = Settings.instance.journalEditordefaultNewNoteFolderSpec;
switch (editorType) { switch (editorType) {
case EditorType.Journal: case EditorType.Journal:
return rootFolder.getFolderWithSpec(journalSpec); spec = Settings.instance.journalEditordefaultNewNoteFolderSpec;
break;
default: default:
return rootFolder.getFolderWithSpec(spec); break;
} }
return rootFolder.getFolderWithSpec(spec) ?? rootFolder;
} }
Future<void> showAlertDialog( Future<void> showAlertDialog(
@ -68,3 +71,10 @@ Future<void> showAlertDialog(
); );
return showDialog(context: context, builder: (context) => dialog); return showDialog(context: context, builder: (context) => dialog);
} }
bool folderWithSpecExists(BuildContext context, String spec) {
var stateContainer = Provider.of<StateContainer>(context, listen: false);
var rootFolder = stateContainer.appState.notesFolder;
return rootFolder.getFolderWithSpec(spec) != null;
}