improved filter tile

This commit is contained in:
Thibault Deckers 2020-05-14 11:26:20 +09:00
parent 5fe7ed49c0
commit f82c19046c
2 changed files with 48 additions and 22 deletions

View file

@ -13,6 +13,7 @@ class AvesFilterChip extends StatefulWidget {
static final BorderRadius borderRadius = BorderRadius.circular(32); static final BorderRadius borderRadius = BorderRadius.circular(32);
static const double buttonBorderWidth = 2; static const double buttonBorderWidth = 2;
static const double minChipWidth = 80;
static const double maxChipWidth = 160; static const double maxChipWidth = 160;
static const double iconSize = 20; static const double iconSize = 20;
static const double padding = 6; static const double padding = 6;
@ -56,36 +57,51 @@ class _AvesFilterChipState extends State<AvesFilterChip> {
final leading = widget.showLeading ? filter.iconBuilder(context, AvesFilterChip.iconSize) : null; final leading = widget.showLeading ? filter.iconBuilder(context, AvesFilterChip.iconSize) : null;
final trailing = widget.removable ? const Icon(AIcons.clear, size: AvesFilterChip.iconSize) : null; final trailing = widget.removable ? const Icon(AIcons.clear, size: AvesFilterChip.iconSize) : null;
Widget child = Row( Widget child = Padding(
mainAxisSize: MainAxisSize.min, padding: const EdgeInsets.symmetric(horizontal: AvesFilterChip.padding * 2),
children: [ child: Row(
if (leading != null) ...[ mainAxisSize: widget.decoration != null ? MainAxisSize.max : MainAxisSize.min,
leading, mainAxisAlignment: MainAxisAlignment.center,
const SizedBox(width: AvesFilterChip.padding), children: [
], if (leading != null) ...[
Flexible( leading,
child: Text( const SizedBox(width: AvesFilterChip.padding),
filter.label, ],
softWrap: false, Flexible(
overflow: TextOverflow.fade, child: Text(
maxLines: 1, filter.label,
softWrap: false,
overflow: TextOverflow.fade,
maxLines: 1,
),
), ),
), if (trailing != null) ...[
if (trailing != null) ...[ const SizedBox(width: AvesFilterChip.padding),
const SizedBox(width: AvesFilterChip.padding), trailing,
trailing, ],
], ],
], ),
); );
if (widget.decoration != null) {
child = Container(
constraints: BoxConstraints(minHeight: DefaultTextStyle.of(context).style.fontSize * 2),
color: Colors.black54,
child: child,
);
}
final shape = RoundedRectangleBorder( final shape = RoundedRectangleBorder(
borderRadius: AvesFilterChip.borderRadius, borderRadius: AvesFilterChip.borderRadius,
); );
return ButtonTheme( child = ButtonTheme(
minWidth: 0, minWidth: 0,
child: Container( child: Container(
constraints: const BoxConstraints(maxWidth: AvesFilterChip.maxChipWidth), constraints: const BoxConstraints(
minWidth: AvesFilterChip.minChipWidth,
maxWidth: AvesFilterChip.maxChipWidth,
),
decoration: widget.decoration, decoration: widget.decoration,
child: Tooltip( child: Tooltip(
message: filter.tooltip, message: filter.tooltip,
@ -98,7 +114,7 @@ class _AvesFilterChipState extends State<AvesFilterChip> {
color: snapshot.hasData ? snapshot.data : Colors.transparent, color: snapshot.hasData ? snapshot.data : Colors.transparent,
width: AvesFilterChip.buttonBorderWidth, width: AvesFilterChip.buttonBorderWidth,
), ),
padding: const EdgeInsets.symmetric(horizontal: AvesFilterChip.padding * 2), padding: EdgeInsets.zero,
shape: shape, shape: shape,
child: child, child: child,
); );
@ -107,5 +123,16 @@ class _AvesFilterChipState extends State<AvesFilterChip> {
), ),
), ),
); );
return child;
// TODO TLAD how to lerp between chip and grid tile
// return Hero(
// tag: filter,
// flightShuttleBuilder: (flight, animation, direction, fromHeroContext, toHeroContext) {
// final toHero = toHeroContext.widget as Hero;
// return Center(child: toHero.child);
// },
// child: child,
// );
} }
} }

View file

@ -55,7 +55,6 @@ class FilterGridPage extends StatelessWidget {
entry: entry, entry: entry,
extent: Constants.thumbnailCacheExtent, extent: Constants.thumbnailCacheExtent,
), ),
colorFilter: ColorFilter.mode(Colors.black26, BlendMode.dstATop),
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
borderRadius: AvesFilterChip.borderRadius, borderRadius: AvesFilterChip.borderRadius,