forked from mgl_crew/Mitgliederladen
58 lines
1.3 KiB
Dart
58 lines
1.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
class Expand extends StatefulWidget {
|
|
final Widget child;
|
|
final bool expand;
|
|
const Expand({super.key, this.expand = true, required this.child});
|
|
|
|
@override
|
|
State<Expand> createState() => _ExpandState();
|
|
}
|
|
|
|
class _ExpandState extends State<Expand> with SingleTickerProviderStateMixin {
|
|
late AnimationController expandController;
|
|
late Animation<double> animation;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
prepareAnimations();
|
|
_runExpandCheck();
|
|
}
|
|
|
|
///Setting up the animation
|
|
void prepareAnimations() {
|
|
expandController = AnimationController(
|
|
vsync: this, duration: const Duration(milliseconds: 500));
|
|
animation = CurvedAnimation(
|
|
parent: expandController,
|
|
curve: Curves.fastOutSlowIn,
|
|
);
|
|
}
|
|
|
|
void _runExpandCheck() {
|
|
if (widget.expand) {
|
|
expandController.forward();
|
|
} else {
|
|
expandController.reverse();
|
|
}
|
|
}
|
|
|
|
@override
|
|
void didUpdateWidget(Expand oldWidget) {
|
|
super.didUpdateWidget(oldWidget);
|
|
_runExpandCheck();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
expandController.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return SizeTransition(
|
|
axisAlignment: 1.0, sizeFactor: animation, child: widget.child);
|
|
}
|
|
}
|