From 54195a16daae7f61607006fb77bf0a78e583e33a Mon Sep 17 00:00:00 2001
From: Vishesh Handa <me@vhanda.in>
Date: Tue, 18 May 2021 11:09:42 +0200
Subject: [PATCH] null safety++

---
 lib/core/notes_cache.dart          | 12 ++--
 lib/core/notes_folder.dart         |  6 +-
 lib/core/notes_folder_config.dart  | 88 +++++++++++++++---------------
 lib/core/virtual_notes_folder.dart |  7 +--
 4 files changed, 54 insertions(+), 59 deletions(-)

diff --git a/lib/core/notes_cache.dart b/lib/core/notes_cache.dart
index 98437556..0d40052e 100644
--- a/lib/core/notes_cache.dart
+++ b/lib/core/notes_cache.dart
@@ -1,5 +1,3 @@
-// @dart=2.9
-
 import 'dart:convert';
 import 'dart:io';
 
@@ -24,9 +22,9 @@ class NotesCache {
   static const CACHE_SIZE = 20;
 
   NotesCache({
-    @required this.filePath,
-    @required this.notesBasePath,
-    @required this.settings,
+    required this.filePath,
+    required this.notesBasePath,
+    required this.settings,
   });
 
   Future load(NotesFolderFS rootFolder) async {
@@ -74,7 +72,7 @@ class NotesCache {
 
   Future<void> clear() async {
     if (!enabled) return;
-    return File(filePath).delete();
+    await File(filePath).delete();
   }
 
   Future<void> buildCache(NotesFolderFS rootFolder) async {
@@ -120,7 +118,7 @@ class NotesCache {
     try {
       contents = await File(filePath).readAsString();
     } on FileSystemException catch (ex) {
-      if (ex.osError.errorCode == 2 /* file not found */) {
+      if (ex.osError?.errorCode == 2 /* file not found */) {
         return [];
       }
       rethrow;
diff --git a/lib/core/notes_folder.dart b/lib/core/notes_folder.dart
index 7f3b030f..afd9bf09 100644
--- a/lib/core/notes_folder.dart
+++ b/lib/core/notes_folder.dart
@@ -1,5 +1,3 @@
-// @dart=2.9
-
 import 'note.dart';
 import 'notes_folder_config.dart';
 import 'notes_folder_notifier.dart';
@@ -14,8 +12,8 @@ abstract class NotesFolder implements NotesFolderNotifier {
 
   List<Note> get notes;
   List<NotesFolder> get subFolders;
-  NotesFolder get parent;
-  NotesFolder get fsFolder;
+  NotesFolder? get parent;
+  NotesFolder? get fsFolder;
 
   NotesFolderConfig get config;
 
diff --git a/lib/core/notes_folder_config.dart b/lib/core/notes_folder_config.dart
index a69bbda6..0cb990e6 100644
--- a/lib/core/notes_folder_config.dart
+++ b/lib/core/notes_folder_config.dart
@@ -1,5 +1,3 @@
-// @dart=2.9
-
 import 'dart:io';
 
 import 'package:equatable/equatable.dart';
@@ -41,21 +39,21 @@ class NotesFolderConfig extends Equatable {
   final String imageLocationSpec;
 
   NotesFolderConfig({
-    @required this.sortingMode,
-    @required this.defaultEditor,
-    @required this.defaultView,
-    @required this.viewHeader,
-    @required this.showNoteSummary,
-    @required this.fileNameFormat,
-    @required this.journalFileNameFormat,
-    @required this.folder,
-    @required this.yamlHeaderEnabled,
-    @required this.yamlModifiedKey,
-    @required this.yamlCreatedKey,
-    @required this.yamlTagsKey,
-    @required this.titleSettings,
-    @required this.inlineTagPrefixes,
-    @required this.imageLocationSpec,
+    required this.sortingMode,
+    required this.defaultEditor,
+    required this.defaultView,
+    required this.viewHeader,
+    required this.showNoteSummary,
+    required this.fileNameFormat,
+    required this.journalFileNameFormat,
+    required this.folder,
+    required this.yamlHeaderEnabled,
+    required this.yamlModifiedKey,
+    required this.yamlCreatedKey,
+    required this.yamlTagsKey,
+    required this.titleSettings,
+    required this.inlineTagPrefixes,
+    required this.imageLocationSpec,
   });
 
   @override
@@ -77,8 +75,8 @@ class NotesFolderConfig extends Equatable {
       ];
 
   static NotesFolderConfig fromSettings(
-      NotesFolderFS folder, Settings settings) {
-    StandardViewHeader viewHeader;
+      NotesFolderFS? folder, Settings settings) {
+    late StandardViewHeader viewHeader;
     switch (settings.folderViewHeaderType) {
       case "TitleGenerated":
         viewHeader = StandardViewHeader.TitleGenerated;
@@ -87,6 +85,7 @@ class NotesFolderConfig extends Equatable {
         viewHeader = StandardViewHeader.FileName;
         break;
       case "TitleOrFileName":
+      default:
         viewHeader = StandardViewHeader.TitleOrFileName;
         break;
     }
@@ -99,7 +98,7 @@ class NotesFolderConfig extends Equatable {
       viewHeader: viewHeader,
       fileNameFormat: settings.noteFileNameFormat,
       journalFileNameFormat: settings.journalNoteFileNameFormat,
-      folder: folder,
+      folder: folder!,
       yamlHeaderEnabled: settings.yamlHeaderEnabled,
       yamlCreatedKey: settings.yamlCreatedKey,
       yamlModifiedKey: settings.yamlModifiedKey,
@@ -118,7 +117,7 @@ class NotesFolderConfig extends Equatable {
     settings.defaultView =
         SettingsFolderViewType.fromFolderViewType(defaultView);
 
-    String ht;
+    String? ht;
     switch (viewHeader) {
       case StandardViewHeader.FileName:
         ht = "FileName";
@@ -144,21 +143,21 @@ class NotesFolderConfig extends Equatable {
   }
 
   NotesFolderConfig copyWith({
-    SortingMode sortingMode,
-    EditorType defaultEditor,
-    FolderViewType defaultView,
-    StandardViewHeader viewHeader,
-    bool showNoteSummary,
-    NoteFileNameFormat fileNameFormat,
-    NoteFileNameFormat journalFileNameFormat,
-    NotesFolderFS folder,
-    bool yamlHeaderEnabled,
-    String yamlCreatedKey,
-    String yamlModifiedKey,
-    String yamlTagsKey,
-    SettingsTitle titleSettings,
-    Set<String> inlineTagPrefixes,
-    String imageLocationSpec,
+    SortingMode? sortingMode,
+    EditorType? defaultEditor,
+    FolderViewType? defaultView,
+    StandardViewHeader? viewHeader,
+    bool? showNoteSummary,
+    NoteFileNameFormat? fileNameFormat,
+    NoteFileNameFormat? journalFileNameFormat,
+    NotesFolderFS? folder,
+    bool? yamlHeaderEnabled,
+    String? yamlCreatedKey,
+    String? yamlModifiedKey,
+    String? yamlTagsKey,
+    SettingsTitle? titleSettings,
+    Set<String>? inlineTagPrefixes,
+    String? imageLocationSpec,
   }) {
     return NotesFolderConfig(
       sortingMode: sortingMode ?? this.sortingMode,
@@ -180,7 +179,7 @@ class NotesFolderConfig extends Equatable {
     );
   }
 
-  static Future<NotesFolderConfig> fromFS(NotesFolderFS folder) async {
+  static Future<NotesFolderConfig?> fromFS(NotesFolderFS folder) async {
     var file = File(p.join(folder.folderPath, FILENAME));
     if (!file.existsSync()) {
       return null;
@@ -198,9 +197,9 @@ class NotesFolderConfig extends Equatable {
     }
 
     var sortingField =
-        SortingField.fromInternalString(map["sortingField"]?.toString());
+        SortingField.fromInternalString(map["sortingField"]!.toString());
     var sortingOrder =
-        SortingOrder.fromInternalString(map["sortingOrder"]?.toString());
+        SortingOrder.fromInternalString(map["sortingOrder"]!.toString());
     var sortingMode = SortingMode(sortingField, sortingOrder);
 
     var defaultEditor =
@@ -211,7 +210,7 @@ class NotesFolderConfig extends Equatable {
     var showNoteSummary = map["showNoteSummary"].toString() != "false";
 
     var folderViewHeaderType = map["folderViewHeaderType"]?.toString();
-    StandardViewHeader viewHeader;
+    late StandardViewHeader viewHeader;
     switch (folderViewHeaderType) {
       case "TitleGenerated":
         viewHeader = StandardViewHeader.TitleGenerated;
@@ -220,6 +219,7 @@ class NotesFolderConfig extends Equatable {
         viewHeader = StandardViewHeader.FileName;
         break;
       case "TitleOrFileName":
+      default:
         viewHeader = StandardViewHeader.TitleOrFileName;
         break;
     }
@@ -228,9 +228,9 @@ class NotesFolderConfig extends Equatable {
     var journalFileNameFormat = map['journalFileNameFormat'].toString();
     var yamlHeaderEnabled = map["yamlHeaderEnabled"]?.toString() != "false";
 
-    var yamlCreatedKey = map['yamlCreatedKey']?.toString();
-    var yamlModifiedKey = map['yamlModifiedKey']?.toString();
-    var yamlTagsKey = map['yamlTagsKey']?.toString();
+    var yamlCreatedKey = map['yamlCreatedKey']!.toString();
+    var yamlModifiedKey = map['yamlModifiedKey']!.toString();
+    var yamlTagsKey = map['yamlTagsKey']!.toString();
     var titleSettings = map['titleSettings']?.toString();
 
     // FIXME: What about inlineTagPrefixes?
@@ -256,7 +256,7 @@ class NotesFolderConfig extends Equatable {
   }
 
   Future<void> saveToFS() async {
-    String ht;
+    String? ht;
     switch (viewHeader) {
       case StandardViewHeader.FileName:
         ht = "FileName";
diff --git a/lib/core/virtual_notes_folder.dart b/lib/core/virtual_notes_folder.dart
index e6e4d9f1..cd73b7d0 100644
--- a/lib/core/virtual_notes_folder.dart
+++ b/lib/core/virtual_notes_folder.dart
@@ -1,5 +1,3 @@
-// @dart=2.9
-
 import 'package:gitjournal/settings.dart';
 import 'note.dart';
 import 'notes_folder.dart';
@@ -24,7 +22,7 @@ class VirtualNotesFolder with NotesFolderNotifier implements NotesFolder {
   bool get hasNotes => _notes.isNotEmpty;
 
   @override
-  NotesFolder get parent => null;
+  NotesFolder? get parent => null;
 
   @override
   String pathSpec() => "";
@@ -36,12 +34,13 @@ class VirtualNotesFolder with NotesFolderNotifier implements NotesFolder {
   String get publicName => "";
 
   @override
-  NotesFolder get fsFolder {
+  NotesFolder? get fsFolder {
     return null;
   }
 
   @override
   NotesFolderConfig get config {
+    // fixme: This isn't expecting null!
     return NotesFolderConfig.fromSettings(null, settings);
   }
 }