staggered animation to view licenses and filter grids

This commit is contained in:
Thibault Deckers 2020-06-08 11:07:43 +09:00
parent 3956f6aa0d
commit 61f4b621eb
5 changed files with 103 additions and 61 deletions

View file

@ -1,5 +1,6 @@
import 'package:aves/widgets/about/licenses.dart'; import 'package:aves/widgets/about/licenses.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
class AboutPage extends StatelessWidget { class AboutPage extends StatelessWidget {
@override @override
@ -9,6 +10,7 @@ class AboutPage extends StatelessWidget {
title: const Text('About'), title: const Text('About'),
), ),
body: SafeArea( body: SafeArea(
child: AnimationLimiter(
child: CustomScrollView( child: CustomScrollView(
slivers: [ slivers: [
SliverPadding( SliverPadding(
@ -40,6 +42,7 @@ class AboutPage extends StatelessWidget {
], ],
), ),
), ),
),
); );
} }
} }

View file

@ -3,6 +3,7 @@ import 'package:aves/widgets/common/icons.dart';
import 'package:aves/widgets/common/menu_row.dart'; import 'package:aves/widgets/common/menu_row.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
class Licenses extends StatefulWidget { class Licenses extends StatefulWidget {
@ -44,7 +45,17 @@ class _LicensesState extends State<Licenses> {
if (index-- == 0) { if (index-- == 0) {
return _buildHeader(); return _buildHeader();
} }
return LicenseRow(_packages[index]); final child = LicenseRow(_packages[index]);
return AnimationConfiguration.staggeredList(
position: index,
duration: const Duration(milliseconds: 375),
child: SlideAnimation(
verticalOffset: 50.0,
child: FadeInAnimation(
child: child,
),
),
);
}, },
childCount: _packages.length + 1, childCount: _packages.length + 1,
), ),

View file

@ -16,6 +16,7 @@ import 'package:aves/widgets/common/data_providers/media_query_data_provider.dar
import 'package:aves/widgets/common/icons.dart'; import 'package:aves/widgets/common/icons.dart';
import 'package:aves/widgets/common/image_providers/thumbnail_provider.dart'; import 'package:aves/widgets/common/image_providers/thumbnail_provider.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -88,6 +89,11 @@ class FilterGridPage extends StatelessWidget {
return MediaQueryDataProvider( return MediaQueryDataProvider(
child: Scaffold( child: Scaffold(
body: SafeArea( body: SafeArea(
child: Selector<MediaQueryData, double>(
selector: (c, mq) => mq.size.width,
builder: (c, mqWidth, child) {
final columnCount = (mqWidth / maxCrossAxisExtent).ceil();
return AnimationLimiter(
child: CustomScrollView( child: CustomScrollView(
slivers: [ slivers: [
appBar, appBar,
@ -102,12 +108,23 @@ class FilterGridPage extends StatelessWidget {
delegate: SliverChildBuilderDelegate( delegate: SliverChildBuilderDelegate(
(context, i) { (context, i) {
final key = filterKeys[i]; final key = filterKeys[i];
return DecoratedFilterChip( final child = DecoratedFilterChip(
source: source, source: source,
filter: filterBuilder(key), filter: filterBuilder(key),
entry: filterEntries[key], entry: filterEntries[key],
onPressed: onPressed, onPressed: onPressed,
); );
return AnimationConfiguration.staggeredGrid(
position: i,
columnCount: columnCount,
duration: const Duration(milliseconds: 375),
child: SlideAnimation(
verticalOffset: 50.0,
child: FadeInAnimation(
child: child,
),
),
);
}, },
childCount: filterKeys.length, childCount: filterKeys.length,
), ),
@ -128,6 +145,9 @@ class FilterGridPage extends StatelessWidget {
), ),
], ],
), ),
);
},
),
), ),
drawer: AppDrawer( drawer: AppDrawer(
source: source, source: source,

View file

@ -139,6 +139,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.8" version: "1.0.8"
flutter_staggered_animations:
dependency: "direct main"
description:
name: flutter_staggered_animations
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
flutter_svg: flutter_svg:
dependency: "direct main" dependency: "direct main"
description: description:

View file

@ -54,6 +54,7 @@ dependencies:
# git: # git:
# url: git://github.com/deckerst/flutter_ijkplayer.git # url: git://github.com/deckerst/flutter_ijkplayer.git
flutter_native_timezone: flutter_native_timezone:
flutter_staggered_animations:
flutter_svg: flutter_svg:
geocoder: geocoder:
google_maps_flutter: google_maps_flutter: