mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-07-01 12:23:44 +08:00
@ -2,6 +2,7 @@ import 'package:fimber/fimber.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gitjournal/core/note.dart';
|
||||
import 'package:gitjournal/core/notes_folder.dart';
|
||||
import 'package:gitjournal/folder_views/compact_view.dart';
|
||||
import 'package:gitjournal/folder_views/journal_view.dart';
|
||||
import 'package:gitjournal/screens/note_editor.dart';
|
||||
import 'package:gitjournal/utils.dart';
|
||||
@ -11,6 +12,7 @@ import 'standard_view.dart';
|
||||
enum FolderViewType {
|
||||
Standard,
|
||||
Journal,
|
||||
Compact,
|
||||
}
|
||||
|
||||
Widget buildFolderView(
|
||||
@ -45,6 +47,12 @@ Widget buildFolderView(
|
||||
noteSelectedFunction: noteSelectionFn,
|
||||
emptyText: emptyText,
|
||||
);
|
||||
case FolderViewType.Compact:
|
||||
return CompactView(
|
||||
folder: folder,
|
||||
noteSelectedFunction: noteSelectionFn,
|
||||
emptyText: emptyText,
|
||||
);
|
||||
}
|
||||
|
||||
assert(false, "Code path should never be executed");
|
||||
|
80
lib/folder_views/compact_view.dart
Normal file
80
lib/folder_views/compact_view.dart
Normal file
@ -0,0 +1,80 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gitjournal/folder_views/list_view.dart';
|
||||
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import 'package:gitjournal/core/note.dart';
|
||||
import 'package:gitjournal/core/notes_folder.dart';
|
||||
|
||||
class CompactView extends StatelessWidget {
|
||||
final NoteSelectedFunction noteSelectedFunction;
|
||||
final NotesFolderReadOnly folder;
|
||||
final String emptyText;
|
||||
|
||||
CompactView({
|
||||
@required this.folder,
|
||||
@required this.noteSelectedFunction,
|
||||
@required this.emptyText,
|
||||
});
|
||||
|
||||
@override
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return FolderListView(
|
||||
folder: folder,
|
||||
noteSelectedFunction: noteSelectedFunction,
|
||||
emptyText: emptyText,
|
||||
noteTileBuilder: _buildRow,
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildRow(BuildContext context, Note note) {
|
||||
var textTheme = Theme.of(context).textTheme;
|
||||
|
||||
var title = note.title;
|
||||
if (title == null || title.isEmpty) {
|
||||
title = note.summary;
|
||||
}
|
||||
var titleTheme = textTheme.title;
|
||||
Widget titleWidget = Text(
|
||||
title,
|
||||
style: titleTheme,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
);
|
||||
Widget trailing;
|
||||
|
||||
var date = note.modified ?? note.created;
|
||||
if (date != null) {
|
||||
var formatter = DateFormat('dd MMM, yyyy');
|
||||
var dateStr = formatter.format(date);
|
||||
trailing = Text(dateStr, style: textTheme.caption);
|
||||
}
|
||||
|
||||
var titleRow = Row(
|
||||
children: <Widget>[Expanded(child: titleWidget), trailing],
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.baseline,
|
||||
textBaseline: TextBaseline.alphabetic,
|
||||
);
|
||||
|
||||
var tile = ListTile(
|
||||
title: titleRow,
|
||||
onTap: () => noteSelectedFunction(note),
|
||||
);
|
||||
|
||||
var dc = Theme.of(context).dividerColor;
|
||||
var divider = Container(
|
||||
height: 1.0,
|
||||
child: Divider(color: dc.withOpacity(dc.opacity / 3)),
|
||||
);
|
||||
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
divider,
|
||||
tile,
|
||||
divider,
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
@ -178,6 +178,12 @@ class _FolderViewState extends State<FolderView> {
|
||||
groupValue: _viewType,
|
||||
onChanged: onViewChange,
|
||||
),
|
||||
RadioListTile<FolderViewType>(
|
||||
title: const Text("Compact View"),
|
||||
value: FolderViewType.Compact,
|
||||
groupValue: _viewType,
|
||||
onChanged: onViewChange,
|
||||
),
|
||||
];
|
||||
|
||||
return AlertDialog(
|
||||
|
Reference in New Issue
Block a user