From 844111007b41c78e5d332dd4719e78efda3726f2 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Tue, 25 May 2021 11:25:24 +0200 Subject: [PATCH] FolderViews: Null Safety++ --- lib/core/note.dart | 4 ++-- lib/folder_views/card_view.dart | 15 ++++++-------- lib/folder_views/common.dart | 28 +++++++++++-------------- lib/folder_views/grid_view.dart | 15 ++++++-------- lib/folder_views/journal_view.dart | 23 +++++++++------------ lib/folder_views/list_view.dart | 18 ++++++++-------- lib/folder_views/note_tile.dart | 25 ++++++++++------------ lib/folder_views/standard_view.dart | 32 ++++++++++++----------------- 8 files changed, 68 insertions(+), 92 deletions(-) diff --git a/lib/core/note.dart b/lib/core/note.dart index 98595c56..deb8191a 100644 --- a/lib/core/note.dart +++ b/lib/core/note.dart @@ -317,11 +317,11 @@ class Note with NotesNotifier { return body.isEmpty; } - String? get summary { + String get summary { if (_loadState != NoteLoadState.Loaded) return ""; _summary ??= stripMarkdownFormatting(body); - return _summary; + return _summary!; } NoteLoadState get loadState { diff --git a/lib/folder_views/card_view.dart b/lib/folder_views/card_view.dart index c963ad66..900b700f 100644 --- a/lib/folder_views/card_view.dart +++ b/lib/folder_views/card_view.dart @@ -1,6 +1,3 @@ -// @dart=2.9 - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; @@ -21,12 +18,12 @@ class CardView extends StatelessWidget { final String searchTerm; CardView({ - @required this.folder, - @required this.noteTapped, - @required this.noteLongPressed, - @required this.isNoteSelected, - @required this.emptyText, - @required this.searchTerm, + required this.folder, + required this.noteTapped, + required this.noteLongPressed, + required this.isNoteSelected, + required this.emptyText, + required this.searchTerm, this.fixedHeight = false, }); diff --git a/lib/folder_views/common.dart b/lib/folder_views/common.dart index 46112ee8..46cca540 100644 --- a/lib/folder_views/common.dart +++ b/lib/folder_views/common.dart @@ -1,5 +1,3 @@ -// @dart=2.9 - import 'package:flutter/material.dart'; import 'package:path/path.dart' as p; @@ -22,15 +20,15 @@ import 'standard_view.dart'; export 'common_types.dart'; Widget buildFolderView({ - @required FolderViewType viewType, - @required NotesFolder folder, - @required String emptyText, - @required StandardViewHeader header, - @required bool showSummary, - @required NoteSelectedFunction noteTapped, - @required NoteSelectedFunction noteLongPressed, - @required NoteBoolPropertyFunction isNoteSelected, - @required String searchTerm, + required FolderViewType viewType, + required NotesFolder folder, + required String emptyText, + required StandardViewHeader header, + required bool showSummary, + required NoteSelectedFunction noteTapped, + required NoteSelectedFunction noteLongPressed, + required NoteBoolPropertyFunction isNoteSelected, + required String searchTerm, }) { switch (viewType) { case FolderViewType.Standard: @@ -72,9 +70,6 @@ Widget buildFolderView({ searchTerm: searchTerm, ); } - - assert(false, "Code path should never be executed"); - return Container(); } void openNoteEditor( @@ -108,10 +103,11 @@ bool openNewNoteEditor(BuildContext context, String term) { var fileName = term; if (fileName.contains(p.separator)) { - parentFolder = rootFolder.getFolderWithSpec(p.dirname(fileName)); - if (parentFolder == null) { + var pFolder = rootFolder.getFolderWithSpec(p.dirname(fileName)); + if (pFolder == null) { return false; } + parentFolder = pFolder; Log.i("New Note Parent Folder: ${parentFolder.folderPath}"); fileName = p.basename(term); diff --git a/lib/folder_views/grid_view.dart b/lib/folder_views/grid_view.dart index 84259393..9b64b2cc 100644 --- a/lib/folder_views/grid_view.dart +++ b/lib/folder_views/grid_view.dart @@ -1,6 +1,3 @@ -// @dart=2.9 - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:gitjournal/core/note.dart'; @@ -18,12 +15,12 @@ class GridFolderView extends StatelessWidget { final String searchTerm; GridFolderView({ - @required this.folder, - @required this.noteTapped, - @required this.noteLongPressed, - @required this.isNoteSelected, - @required this.emptyText, - @required this.searchTerm, + required this.folder, + required this.noteTapped, + required this.noteLongPressed, + required this.isNoteSelected, + required this.emptyText, + required this.searchTerm, }); @override diff --git a/lib/folder_views/journal_view.dart b/lib/folder_views/journal_view.dart index b29fb74a..ffa5e626 100644 --- a/lib/folder_views/journal_view.dart +++ b/lib/folder_views/journal_view.dart @@ -1,6 +1,3 @@ -// @dart=2.9 - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -25,12 +22,12 @@ class JournalView extends StatelessWidget { static final _timeFormat = DateFormat('Hm'); JournalView({ - @required this.folder, - @required this.noteTapped, - @required this.noteLongPressed, - @required this.isNoteSelected, - @required this.emptyText, - @required this.searchTerm, + required this.folder, + required this.noteTapped, + required this.noteLongPressed, + required this.isNoteSelected, + required this.emptyText, + required this.searchTerm, }) : searchTermLowerCase = searchTerm.toLowerCase(); @override @@ -48,7 +45,7 @@ class JournalView extends StatelessWidget { Widget titleWidget = Container(); var textTheme = Theme.of(context).textTheme; - DateTime date; + DateTime? date; var sortingField = folder.config.sortingMode.field; if (sortingField == SortingField.Created) { date = note.created; @@ -60,12 +57,12 @@ class JournalView extends StatelessWidget { var dateStr = _dateFormat.format(date); var time = _timeFormat.format(date); - var timeColor = textTheme.bodyText2.color.withAlpha(100); + var timeColor = textTheme.bodyText2!.color!.withAlpha(100); titleWidget = Row( children: [ Text(dateStr, style: textTheme.headline6), - Text(time, style: textTheme.bodyText2.copyWith(color: timeColor)), + Text(time, style: textTheme.bodyText2!.copyWith(color: timeColor)), ], crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic, @@ -78,7 +75,7 @@ class JournalView extends StatelessWidget { text: note.summary + '\n', // no minLines option maxLines: 3, overflow: TextOverflow.ellipsis, - style: textTheme.bodyText2, + style: textTheme.bodyText2!, highlightText: searchTerm, highlightTextLowerCase: searchTermLowerCase, ), diff --git a/lib/folder_views/list_view.dart b/lib/folder_views/list_view.dart index 8f01929e..3b802c3b 100644 --- a/lib/folder_views/list_view.dart +++ b/lib/folder_views/list_view.dart @@ -1,5 +1,3 @@ -// @dart=2.9 - import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -22,11 +20,11 @@ class FolderListView extends StatefulWidget { final String searchTerm; FolderListView({ - @required this.folder, - @required this.noteTileBuilder, - @required this.emptyText, - @required this.isNoteSelected, - @required this.searchTerm, + required this.folder, + required this.noteTileBuilder, + required this.emptyText, + required this.isNoteSelected, + required this.searchTerm, }); @override @@ -75,14 +73,14 @@ class _FolderListViewState extends State { if (_listKey.currentState == null) { return; } - _listKey.currentState.insertItem(index); + _listKey.currentState!.insertItem(index); } void _noteRemoved(int index, Note note) { if (_listKey.currentState == null) { return; } - _listKey.currentState.removeItem(index, (context, animation) { + _listKey.currentState!.removeItem(index, (context, animation) { var i = deletedViaDismissed.indexWhere((path) => path == note.filePath); if (i == -1) { return _buildNote(note, widget.isNoteSelected(note), animation); @@ -152,7 +150,7 @@ class _FolderListViewState extends State { viewItem = IconDismissable( key: ValueKey("FolderListView_" + note.filePath), child: viewItem, - backgroundColor: Colors.red[800], + backgroundColor: Colors.red[800]!, iconData: Icons.delete, onDismissed: (direction) { deletedViaDismissed.add(note.filePath); diff --git a/lib/folder_views/note_tile.dart b/lib/folder_views/note_tile.dart index 68f36167..ec8e51ad 100644 --- a/lib/folder_views/note_tile.dart +++ b/lib/folder_views/note_tile.dart @@ -1,5 +1,3 @@ -// @dart=2.9 - import 'dart:convert'; import 'package:flutter/material.dart'; @@ -17,11 +15,11 @@ class NoteTile extends StatelessWidget { final String searchTermLowerCase; NoteTile({ - @required this.note, - @required this.noteTapped, - @required this.noteLongPressed, - @required this.selected, - @required this.searchTerm, + required this.note, + required this.noteTapped, + required this.noteLongPressed, + required this.selected, + required this.searchTerm, }) : searchTermLowerCase = searchTerm.toLowerCase(); @override @@ -47,18 +45,17 @@ class NoteTile extends StatelessWidget { padding: const EdgeInsets.all(16.0), child: Column( children: [ - if (note.title != null && note.title.isNotEmpty) + if (note.title.isNotEmpty) HighlightedText( text: note.title, maxLines: 2, overflow: TextOverflow.ellipsis, - style: textTheme.headline6 - .copyWith(fontSize: textTheme.headline6.fontSize * 0.80), + style: textTheme.headline6! + .copyWith(fontSize: textTheme.headline6!.fontSize! * 0.80), highlightText: searchTerm, highlightTextLowerCase: searchTermLowerCase, ), - if (note.title != null && note.title.isNotEmpty) - const SizedBox(height: 8.0), + if (note.title.isNotEmpty) const SizedBox(height: 8.0), Flexible( flex: 1, child: _buildBody(context, body), @@ -117,8 +114,8 @@ class NoteTile extends StatelessWidget { text: text, highlightText: searchTerm, highlightTextLowerCase: searchTermLowerCase, - style: textTheme.subtitle1 - .copyWith(fontSize: textTheme.subtitle1.fontSize * 0.90), + style: textTheme.subtitle1! + .copyWith(fontSize: textTheme.subtitle1!.fontSize! * 0.90), overflow: TextOverflow.ellipsis, maxLines: _maxLines - 1, ); diff --git a/lib/folder_views/standard_view.dart b/lib/folder_views/standard_view.dart index 6c464536..f28cc140 100644 --- a/lib/folder_views/standard_view.dart +++ b/lib/folder_views/standard_view.dart @@ -1,6 +1,3 @@ -// @dart=2.9 - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -34,14 +31,14 @@ class StandardView extends StatelessWidget { static final _dateFormat = DateFormat('dd MMM, yyyy'); StandardView({ - @required this.folder, - @required this.noteTapped, - @required this.noteLongPressed, - @required this.emptyText, - @required this.headerType, - @required this.showSummary, - @required this.isNoteSelected, - @required this.searchTerm, + required this.folder, + required this.noteTapped, + required this.noteLongPressed, + required this.emptyText, + required this.headerType, + required this.showSummary, + required this.isNoteSelected, + required this.searchTerm, }) : searchTermLowerCase = searchTerm.toLowerCase(); @override @@ -62,7 +59,7 @@ class StandardView extends StatelessWidget { switch (headerType) { case StandardViewHeader.TitleOrFileName: title = note.title; - if (title == null || title.isEmpty) { + if (title.isEmpty) { title = note.fileName; } break; @@ -73,25 +70,22 @@ class StandardView extends StatelessWidget { case StandardViewHeader.TitleGenerated: title = note.title; - if (title == null || title.isEmpty) { + if (title.isEmpty) { title = note.summary; } break; - - default: - assert(false, "StandardViewHeader must not be null"); } Widget titleWidget = HighlightedText( text: title, - style: textTheme.headline6, + style: textTheme.headline6!, overflow: TextOverflow.ellipsis, highlightText: searchTerm, highlightTextLowerCase: searchTermLowerCase, ); Widget trailing = Container(); - DateTime date; + DateTime? date; var sortingField = folder.config.sortingMode.field; if (sortingField == SortingField.Modified) { date = note.modified; @@ -119,7 +113,7 @@ class StandardView extends StatelessWidget { text: note.summary + '\n', // no minLines option maxLines: 3, overflow: TextOverflow.ellipsis, - style: textTheme.bodyText2, + style: textTheme.bodyText2!, highlightText: searchTerm, highlightTextLowerCase: searchTermLowerCase, ),