FolderViews: Null Safety++

This commit is contained in:
Vishesh Handa
2021-05-25 11:25:24 +02:00
parent 94f8307315
commit 844111007b
8 changed files with 68 additions and 92 deletions

View File

@ -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 {

View File

@ -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,
});

View File

@ -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);

View File

@ -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

View File

@ -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: <Widget>[
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,
),

View File

@ -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<FolderListView> {
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<FolderListView> {
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);

View File

@ -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: <Widget>[
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,
);

View File

@ -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,
),