filter chip decoration pin animation

This commit is contained in:
Thibault Deckers 2020-11-23 11:48:30 +09:00
parent 272916eaa6
commit ad2d9b3552
3 changed files with 28 additions and 9 deletions

View file

@ -15,6 +15,9 @@ class Durations {
static const appBarTitleAnimation = Duration(milliseconds: 300);
static const appBarActionChangeAnimation = Duration(milliseconds: 200);
// filter grids animations
static const chipDecorationAnimation = Duration(milliseconds: 200);
// collection animations
static const filterBarRemovalAnimation = Duration(milliseconds: 400);
static const collectionOpOverlayAnimation = Duration(milliseconds: 300);

View file

@ -111,7 +111,7 @@ class _AvesFilterChipState extends State<AvesFilterChip> {
mainAxisSize: MainAxisSize.min,
children: [
content,
Flexible(child: widget.details),
widget.details,
],
);
}

View file

@ -6,6 +6,7 @@ import 'package:aves/model/image_entry.dart';
import 'package:aves/model/source/collection_source.dart';
import 'package:aves/utils/android_file_utils.dart';
import 'package:aves/utils/constants.dart';
import 'package:aves/utils/durations.dart';
import 'package:aves/widgets/collection/thumbnail/raster.dart';
import 'package:aves/widgets/collection/thumbnail/vector.dart';
import 'package:aves/widgets/common/aves_filter_chip.dart';
@ -63,16 +64,31 @@ class DecoratedFilterChip extends StatelessWidget {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
if (pinned)
Padding(
padding: EdgeInsets.only(right: 8),
child: DecoratedIcon(
AIcons.pin,
color: FilterGridPage.detailColor,
shadows: [Constants.embossShadow],
size: 16,
AnimatedSwitcher(
duration: Durations.chipDecorationAnimation,
switchInCurve: Curves.easeInOutCubic,
switchOutCurve: Curves.easeInOutCubic,
transitionBuilder: (child, animation) => FadeTransition(
opacity: animation,
child: SizeTransition(
axis: Axis.horizontal,
sizeFactor: animation,
axisAlignment: 1.0,
child: child,
),
),
child: pinned
? Padding(
padding: EdgeInsets.only(right: 8),
child: DecoratedIcon(
AIcons.pin,
color: FilterGridPage.detailColor,
shadows: [Constants.embossShadow],
size: 16,
),
)
: SizedBox.shrink(),
),
if (filter is AlbumFilter && androidFileUtils.isOnRemovableStorage(filter.album))
Padding(
padding: EdgeInsets.only(right: 8),