Untitled
unknown
plain_text
4 years ago
3.4 kB
10
Indexable
class AppButton extends StatefulWidget {
final Function? onTap;
final String? text;
final double? width;
final Color? color;
final Color? textColor;
final Color? disabledColor;
final Color? focusColor;
final Color? hoverColor;
final Color? splashColor;
final EdgeInsetsGeometry? padding;
final EdgeInsetsGeometry? margin;
final TextStyle? textStyle;
final ShapeBorder? shapeBorder;
final Widget? child;
final double? elevation;
final double? height;
final bool? enabled;
final bool? enableScaleAnimation;
AppButton({
this.onTap,
this.text,
this.width,
this.color,
this.textColor,
this.padding,
this.margin,
this.textStyle,
this.shapeBorder,
this.child,
this.elevation,
this.enabled,
this.height,
this.disabledColor,
this.focusColor,
this.hoverColor,
this.splashColor,
this.enableScaleAnimation,
});
@override
_AppButtonState createState() => _AppButtonState();
}
class _AppButtonState extends State<AppButton>
with SingleTickerProviderStateMixin {
double _scale = 1.0;
AnimationController? _controller;
@override
void initState() {
if (widget.enableScaleAnimation
.validate(value: enableAppButtonScaleAnimationGlobal)) {
_controller = AnimationController(
vsync: this,
duration: Duration(
milliseconds: appButtonScaleAnimationDurationGlobal ?? 50,
),
lowerBound: 0.0,
upperBound: 0.1,
)..addListener(() {
setState(() {});
});
}
super.initState();
}
@override
void dispose() {
_controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (_controller != null && widget.enabled.validate(value: true)) {
_scale = 1 - _controller!.value;
}
if (widget.enableScaleAnimation
.validate(value: enableAppButtonScaleAnimationGlobal)) {
return Listener(
onPointerDown: (details) {
_controller?.forward();
},
onPointerUp: (details) {
_controller?.reverse();
},
child: Transform.scale(
scale: _scale,
child: buildButton(),
),
);
} else {
return buildButton();
}
}
Widget buildButton() {
return Padding(
padding: widget.margin ?? EdgeInsets.zero,
child: MaterialButton(
minWidth: widget.width,
padding: widget.padding ?? dynamicAppButtonPadding(context),
onPressed: widget.enabled.validate(value: true)
? widget.onTap != null
? widget.onTap as void Function()?
: null
: null,
color: widget.color ?? appButtonBackgroundColorGlobal,
child: widget.child ??
Text(
widget.text.validate(),
style: widget.textStyle ??
boldTextStyle(
color: widget.textColor ?? defaultAppButtonTextColorGlobal,
),
),
shape: widget.shapeBorder ?? defaultAppButtonShapeBorder,
elevation: widget.elevation ?? defaultAppButtonElevation,
animationDuration: Duration(milliseconds: 300),
height: widget.height,
disabledColor: widget.disabledColor,
focusColor: widget.focusColor,
hoverColor: widget.hoverColor,
splashColor: widget.splashColor,
),
);
}
}Editor is loading...