mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-27 17:29:50 +08:00
AppDrawer: Animate repo list
When it is hidden / visible. The animation isn't perfect as the slide animation seems to go in a differet speed than the size one. I'm not sure what is going on.
This commit is contained in:
@ -8,6 +8,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
|||||||
import 'package:launch_review/launch_review.dart';
|
import 'package:launch_review/launch_review.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:share/share.dart';
|
import 'package:share/share.dart';
|
||||||
|
import 'package:time/time.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
import 'package:gitjournal/analytics.dart';
|
import 'package:gitjournal/analytics.dart';
|
||||||
@ -22,13 +23,34 @@ class AppDrawer extends StatefulWidget {
|
|||||||
_AppDrawerState createState() => _AppDrawerState();
|
_AppDrawerState createState() => _AppDrawerState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AppDrawerState extends State<AppDrawer> {
|
class _AppDrawerState extends State<AppDrawer> with TickerProviderStateMixin {
|
||||||
|
AnimationController sizeController;
|
||||||
|
AnimationController slideController;
|
||||||
bool repoChooserVisible = false;
|
bool repoChooserVisible = false;
|
||||||
|
|
||||||
List<Widget> _buildRepoList() {
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
|
||||||
|
slideController =
|
||||||
|
AnimationController(duration: 250.milliseconds, vsync: this);
|
||||||
|
sizeController =
|
||||||
|
AnimationController(duration: 250.milliseconds, vsync: this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
slideController.dispose();
|
||||||
|
sizeController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildRepoList() {
|
||||||
var divider = Row(children: <Widget>[const Expanded(child: Divider())]);
|
var divider = Row(children: <Widget>[const Expanded(child: Divider())]);
|
||||||
|
|
||||||
return [
|
Widget w = Column(
|
||||||
|
children: <Widget>[
|
||||||
|
const SizedBox(height: 8),
|
||||||
_buildDrawerTile(
|
_buildDrawerTile(
|
||||||
context,
|
context,
|
||||||
icon: FontAwesomeIcons.book,
|
icon: FontAwesomeIcons.book,
|
||||||
@ -45,7 +67,20 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||||||
selected: false,
|
selected: false,
|
||||||
),
|
),
|
||||||
divider,
|
divider,
|
||||||
];
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
w = SlideTransition(
|
||||||
|
position: Tween(begin: const Offset(0.0, -1.0), end: Offset.zero)
|
||||||
|
.animate(slideController),
|
||||||
|
transformHitTests: false,
|
||||||
|
child: w,
|
||||||
|
);
|
||||||
|
|
||||||
|
return SizeTransition(
|
||||||
|
sizeFactor: Tween(begin: 0.0, end: 1.0).animate(sizeController),
|
||||||
|
child: w,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -86,10 +121,17 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||||||
setState(() {
|
setState(() {
|
||||||
repoChooserVisible = !repoChooserVisible;
|
repoChooserVisible = !repoChooserVisible;
|
||||||
});
|
});
|
||||||
|
if (slideController.isCompleted) {
|
||||||
|
slideController.reverse(from: 1.0);
|
||||||
|
sizeController.reverse(from: 1.0);
|
||||||
|
} else {
|
||||||
|
slideController.forward(from: 0.0);
|
||||||
|
sizeController.forward(from: 0.0);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
// If they are multiple show the current one which a tick mark
|
// If they are multiple show the current one which a tick mark
|
||||||
if (repoChooserVisible) ..._buildRepoList(),
|
_buildRepoList(),
|
||||||
if (setupGitButton != null) ...[setupGitButton, divider],
|
if (setupGitButton != null) ...[setupGitButton, divider],
|
||||||
if (!appSettings.proMode)
|
if (!appSettings.proMode)
|
||||||
_buildDrawerTile(
|
_buildDrawerTile(
|
||||||
|
Reference in New Issue
Block a user