From 83449fa676a76857a9704c37838503457b637e17 Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Thu, 27 Jan 2022 03:12:35 +0800 Subject: [PATCH] Refactor: extract widget to center ListTile icon --- lib/widget/list_tile_center_leading.dart | 24 ++++++++++++++++++++++++ lib/widget/settings.dart | 4 ++-- lib/widget/shared_file_viewer.dart | 4 ++-- lib/widget/viewer_detail_pane.dart | 22 ++++++++-------------- 4 files changed, 36 insertions(+), 18 deletions(-) create mode 100644 lib/widget/list_tile_center_leading.dart diff --git a/lib/widget/list_tile_center_leading.dart b/lib/widget/list_tile_center_leading.dart new file mode 100644 index 00000000..f22c4b1b --- /dev/null +++ b/lib/widget/list_tile_center_leading.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; + +/// Center leading widget in ListTile +/// +/// Leading widget in ListTile used to center align vertically, but it was +/// changed in an update later. This widget revert to the old behavior +/// +/// This widget is only needed when the content of the ListTile may grow more +/// than 1 line +class ListTileCenterLeading extends StatelessWidget { + const ListTileCenterLeading({ + Key? key, + required this.child, + }) : super(key: key); + + @override + build(BuildContext context) => SizedBox( + height: double.infinity, + child: child, + ); + + final Widget child; +} diff --git a/lib/widget/settings.dart b/lib/widget/settings.dart index cc14bbda..385742df 100644 --- a/lib/widget/settings.dart +++ b/lib/widget/settings.dart @@ -18,6 +18,7 @@ import 'package:nc_photos/theme.dart'; import 'package:nc_photos/widget/fancy_option_picker.dart'; import 'package:nc_photos/widget/gps_map.dart'; import 'package:nc_photos/widget/home.dart'; +import 'package:nc_photos/widget/list_tile_center_leading.dart'; import 'package:nc_photos/widget/root_picker.dart'; import 'package:nc_photos/widget/share_folder_picker.dart'; import 'package:nc_photos/widget/stateful_slider.dart'; @@ -212,8 +213,7 @@ class _SettingsState extends State { return ListTile( leading: leading == null ? null - : SizedBox( - height: double.infinity, + : ListTileCenterLeading( child: leading, ), title: Text(label), diff --git a/lib/widget/shared_file_viewer.dart b/lib/widget/shared_file_viewer.dart index c7f8cba8..e49be413 100644 --- a/lib/widget/shared_file_viewer.dart +++ b/lib/widget/shared_file_viewer.dart @@ -21,6 +21,7 @@ import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/theme.dart'; import 'package:nc_photos/use_case/remove.dart'; import 'package:nc_photos/use_case/remove_share.dart'; +import 'package:nc_photos/widget/list_tile_center_leading.dart'; import 'package:path/path.dart' as path; class SharedFileViewerArguments { @@ -158,8 +159,7 @@ class _SharedFileViewerState extends State { return ListTile( title: Text(_getShareTitle(share)), subtitle: Text(dateStr), - leading: SizedBox( - height: double.infinity, + leading: ListTileCenterLeading( child: Icon(_getShareIcon(share)), ), trailing: Row( diff --git a/lib/widget/viewer_detail_pane.dart b/lib/widget/viewer_detail_pane.dart index 95451225..01627006 100644 --- a/lib/widget/viewer_detail_pane.dart +++ b/lib/widget/viewer_detail_pane.dart @@ -31,6 +31,7 @@ import 'package:nc_photos/widget/animated_visibility.dart'; import 'package:nc_photos/widget/gps_map.dart'; import 'package:nc_photos/widget/handler/add_selection_to_album_handler.dart'; import 'package:nc_photos/widget/handler/archive_selection_handler.dart'; +import 'package:nc_photos/widget/list_tile_center_leading.dart'; import 'package:nc_photos/widget/photo_date_time_edit_dialog.dart'; import 'package:path/path.dart'; import 'package:tuple/tuple.dart'; @@ -175,8 +176,7 @@ class _ViewerDetailPaneState extends State { child: Divider(), ), ListTile( - leading: SizedBox( - height: double.infinity, + leading: ListTileCenterLeading( child: Icon( Icons.image_outlined, color: AppTheme.getSecondaryTextColor(context), @@ -187,8 +187,7 @@ class _ViewerDetailPaneState extends State { ), if (!widget.file.isOwned(widget.account.username)) ListTile( - leading: SizedBox( - height: double.infinity, + leading: ListTileCenterLeading( child: Icon( Icons.share_outlined, color: AppTheme.getSecondaryTextColor(context), @@ -212,8 +211,7 @@ class _ViewerDetailPaneState extends State { if (widget.file.metadata?.imageWidth != null && widget.file.metadata?.imageHeight != null) ListTile( - leading: SizedBox( - height: double.infinity, + leading: ListTileCenterLeading( child: Icon( Icons.aspect_ratio, color: AppTheme.getSecondaryTextColor(context), @@ -225,19 +223,15 @@ class _ViewerDetailPaneState extends State { ) else ListTile( - leading: SizedBox( - height: double.infinity, - child: Icon( - Icons.aspect_ratio, - color: AppTheme.getSecondaryTextColor(context), - ), + leading: Icon( + Icons.aspect_ratio, + color: AppTheme.getSecondaryTextColor(context), ), title: Text(_byteSizeToString(widget.file.contentLength ?? 0)), ), if (_model != null) ListTile( - leading: SizedBox( - height: double.infinity, + leading: ListTileCenterLeading( child: Icon( Icons.camera_outlined, color: AppTheme.getSecondaryTextColor(context),