mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-07-12 00:02:41 +00:00
100 lines
2.8 KiB
Dart
100 lines
2.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:syncrow_app/utils/context_extension.dart';
|
|
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
|
|
|
class DoorLockButton extends StatelessWidget {
|
|
const DoorLockButton({
|
|
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 ??
|
|
context.bodyMedium.copyWith(
|
|
fontSize: 16,
|
|
color: foregroundColor,
|
|
),
|
|
),
|
|
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.grey;
|
|
}),
|
|
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 Text('Done') :child ,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|