mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-09 22:57:21 +00:00
98 lines
3.1 KiB
Dart
98 lines
3.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:syncrow_web/utils/color_manager.dart';
|
|
|
|
class DefaultButton extends StatelessWidget {
|
|
const DefaultButton({
|
|
super.key,
|
|
this.enabled = true,
|
|
this.onPressed,
|
|
required this.child,
|
|
this.isSecondary = false,
|
|
this.isLoading = false,
|
|
this.isDone = false,
|
|
this.customTextStyle,
|
|
this.customButtonStyle,
|
|
this.backgroundColor,
|
|
this.foregroundColor,
|
|
this.borderRadius,
|
|
this.height,
|
|
this.padding,
|
|
});
|
|
final void Function()? onPressed;
|
|
final Widget child;
|
|
final double? height;
|
|
final bool isSecondary;
|
|
final double? borderRadius;
|
|
final bool enabled;
|
|
final double? padding;
|
|
final bool isDone;
|
|
final bool isLoading;
|
|
final TextStyle? customTextStyle;
|
|
final ButtonStyle? customButtonStyle;
|
|
final Color? backgroundColor;
|
|
final Color? foregroundColor;
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return ElevatedButton(
|
|
onPressed: enabled ? onPressed : null,
|
|
style: isSecondary
|
|
? null
|
|
: customButtonStyle ??
|
|
ButtonStyle(
|
|
textStyle: MaterialStateProperty.all(
|
|
customTextStyle ??
|
|
Theme.of(context).textTheme.bodySmall!.copyWith(
|
|
fontSize: 13,
|
|
color: foregroundColor,
|
|
fontWeight: FontWeight.normal),
|
|
),
|
|
foregroundColor: MaterialStateProperty.all(
|
|
isSecondary
|
|
? Colors.black
|
|
: enabled
|
|
? foregroundColor ?? Colors.white
|
|
: Colors.black,
|
|
),
|
|
backgroundColor: MaterialStateProperty.resolveWith<Color>(
|
|
(Set<MaterialState> states) {
|
|
return enabled
|
|
? backgroundColor ?? ColorsManager.primaryColor
|
|
: Colors.black.withOpacity(0.2);
|
|
}),
|
|
shape: MaterialStateProperty.all(
|
|
RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(borderRadius ?? 20),
|
|
),
|
|
),
|
|
fixedSize: MaterialStateProperty.all(
|
|
const Size.fromHeight(50),
|
|
),
|
|
padding: MaterialStateProperty.all(
|
|
EdgeInsets.all(padding ?? 10),
|
|
),
|
|
minimumSize: MaterialStateProperty.all(
|
|
const Size.fromHeight(50),
|
|
),
|
|
),
|
|
child: SizedBox(
|
|
height: height ?? 50,
|
|
child: Center(
|
|
child: isLoading
|
|
? const SizedBox.square(
|
|
dimension: 24,
|
|
child: CircularProgressIndicator(
|
|
color: Colors.white,
|
|
),
|
|
)
|
|
: isDone
|
|
? const Icon(
|
|
Icons.check_circle_outline,
|
|
color: Colors.white,
|
|
)
|
|
: child,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|