aves/lib/widgets/common/basic/multi_cross_fader.dart
2021-05-13 19:34:23 +09:00

57 lines
1.4 KiB
Dart

import 'package:flutter/material.dart';
class MultiCrossFader extends StatefulWidget {
final Duration duration;
final Curve fadeCurve, sizeCurve;
final AlignmentGeometry alignment;
final Widget child;
const MultiCrossFader({
required this.duration,
this.fadeCurve = Curves.linear,
this.sizeCurve = Curves.linear,
this.alignment = Alignment.topCenter,
required this.child,
});
@override
_MultiCrossFaderState createState() => _MultiCrossFaderState();
}
class _MultiCrossFaderState extends State<MultiCrossFader> {
late Widget _first, _second;
CrossFadeState _fadeState = CrossFadeState.showFirst;
@override
void initState() {
super.initState();
_first = widget.child;
_second = SizedBox();
}
@override
void didUpdateWidget(covariant MultiCrossFader oldWidget) {
super.didUpdateWidget(oldWidget);
if (_first == oldWidget.child) {
_second = widget.child;
_fadeState = CrossFadeState.showSecond;
} else {
_first = widget.child;
_fadeState = CrossFadeState.showFirst;
}
}
@override
Widget build(BuildContext context) {
return AnimatedCrossFade(
firstChild: _first,
secondChild: _second,
firstCurve: widget.fadeCurve,
secondCurve: widget.fadeCurve,
sizeCurve: widget.sizeCurve,
alignment: widget.alignment,
crossFadeState: _fadeState,
duration: widget.duration,
);
}
}