From 8aa96c1b9c85ff8e56e787a8b16a60c9c21fd405 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Mon, 18 May 2020 23:46:36 +0200 Subject: [PATCH] GridView: Use CardView internally Just with a fixed height card. This way we save on lots of code duplication, specially as each of these views will become more complex as we add dismissable, animations and selectable notes. --- lib/folder_views/card_view.dart | 14 +++++++---- lib/folder_views/grid_view.dart | 42 +++++---------------------------- 2 files changed, 16 insertions(+), 40 deletions(-) diff --git a/lib/folder_views/card_view.dart b/lib/folder_views/card_view.dart index f9823602..1e2ba454 100644 --- a/lib/folder_views/card_view.dart +++ b/lib/folder_views/card_view.dart @@ -1,21 +1,20 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:gitjournal/core/note.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/folder_views/note_tile.dart'; -typedef void NoteSelectedFunction(Note note); - class CardView extends StatelessWidget { final NoteSelectedFunction noteSelectedFunction; final NotesFolder folder; final String emptyText; + final bool fixedHeight; CardView({ @required this.folder, @required this.noteSelectedFunction, @required this.emptyText, + this.fixedHeight = false, }); @override @@ -34,6 +33,13 @@ class CardView extends StatelessWidget { ); } + StaggeredTile stagTile; + if (fixedHeight) { + stagTile = const StaggeredTile.extent(1, 200.0); + } else { + stagTile = const StaggeredTile.fit(1); + } + var gridView = StaggeredGridView.extentBuilder( itemCount: folder.notes.length, itemBuilder: (BuildContext context, int index) { @@ -41,7 +47,7 @@ class CardView extends StatelessWidget { return NoteTile(note, noteSelectedFunction); }, maxCrossAxisExtent: 200.0, - staggeredTileBuilder: (int i) => const StaggeredTile.fit(1), + staggeredTileBuilder: (int i) => stagTile, mainAxisSpacing: 8.0, crossAxisSpacing: 8.0, padding: const EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 16.0), diff --git a/lib/folder_views/grid_view.dart b/lib/folder_views/grid_view.dart index 87cc1dfa..1fbebc09 100644 --- a/lib/folder_views/grid_view.dart +++ b/lib/folder_views/grid_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:gitjournal/core/notes_folder.dart'; +import 'package:gitjournal/folder_views/card_view.dart'; import 'package:gitjournal/folder_views/note_tile.dart'; class GridFolderView extends StatelessWidget { @@ -16,42 +17,11 @@ class GridFolderView extends StatelessWidget { @override Widget build(BuildContext context) { - if (folder.isEmpty) { - return Center( - child: Text( - emptyText, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 28.0, - fontWeight: FontWeight.w300, - color: Colors.grey[350], - ), - ), - ); - } - - var gridView = GridView.builder( - gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 200.0, - mainAxisSpacing: 10.0, - crossAxisSpacing: 10.0, - childAspectRatio: 1 / 1.1, - ), - itemBuilder: _buildItem, - itemCount: folder.notes.length, - padding: const EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 16.0), + return CardView( + folder: folder, + noteSelectedFunction: noteSelectedFunction, + emptyText: emptyText, + fixedHeight: true, ); - - return gridView; - } - - Widget _buildItem(BuildContext context, int i) { - // vHanda FIXME: Why does this method get called with i >= length ? - if (i >= folder.notes.length) { - return Container(); - } - - var note = folder.notes[i]; - return NoteTile(note, noteSelectedFunction); } }