606 lines
17 KiB
Dart
606 lines
17 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:rasadyar_app/presentation/common/app_color.dart';
|
|
import 'package:rasadyar_app/presentation/common/assets.dart';
|
|
import 'package:rasadyar_app/presentation/utils/color_utils.dart';
|
|
import 'package:rasadyar_app/presentation/widget/vec_widget.dart';
|
|
|
|
class RFabOutlined extends StatefulWidget {
|
|
final Widget icon;
|
|
VoidCallback? onPressed;
|
|
final Color backgroundColor;
|
|
final Color? borderColor;
|
|
final double? radius;
|
|
OutlinedBorder? shapeBorder;
|
|
|
|
@override
|
|
State<RFabOutlined> createState() => _RFabOutlinedState();
|
|
|
|
//region General
|
|
RFabOutlined({
|
|
required this.icon,
|
|
required this.onPressed,
|
|
required this.backgroundColor,
|
|
required this.borderColor,
|
|
this.radius = 56.0,
|
|
super.key,
|
|
}) : shapeBorder = CircleBorder(
|
|
side: BorderSide(color: borderColor ?? Colors.transparent),
|
|
);
|
|
|
|
RFabOutlined.noBorder({
|
|
required this.icon,
|
|
required this.onPressed,
|
|
required this.backgroundColor,
|
|
super.key,
|
|
}) : borderColor = Colors.transparent,
|
|
radius = 56.0,
|
|
shapeBorder = CircleBorder(
|
|
side: BorderSide(color: Colors.transparent, width: 1),
|
|
);
|
|
|
|
RFabOutlined.small({
|
|
required this.icon,
|
|
required this.onPressed,
|
|
required this.backgroundColor,
|
|
required this.borderColor,
|
|
super.key,
|
|
}) : radius = 40.0,
|
|
shapeBorder = CircleBorder(
|
|
side: BorderSide(color: borderColor ?? Colors.transparent, width: 1),
|
|
);
|
|
|
|
RFabOutlined.smallNoBorder({
|
|
required this.icon,
|
|
required this.onPressed,
|
|
required this.backgroundColor,
|
|
super.key,
|
|
}) : borderColor = Colors.transparent,
|
|
radius = 40.0,
|
|
shapeBorder = CircleBorder(
|
|
side: BorderSide(color: Colors.transparent, width: 1),
|
|
);
|
|
|
|
//endregion
|
|
|
|
//region Add
|
|
RFabOutlined.smallAdd({VoidCallback? onPressed, Key? key})
|
|
: this.small(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.greenNormal,
|
|
borderColor: AppColor.greenNormal,
|
|
icon: vecWidget2(
|
|
Assets.vecAddSvg,
|
|
|
|
color: AppColor.greenNormal,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.smallAddNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.smallNoBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.greenNormal,
|
|
icon: vecWidget(
|
|
Assets.vecAddSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenNormal
|
|
: AppColor.greenNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.add({VoidCallback? onPressed, Key? key})
|
|
: this(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.greenNormal,
|
|
borderColor: AppColor.greenNormal,
|
|
icon: vecWidget(
|
|
Assets.vecAddSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenNormal
|
|
: AppColor.greenNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.addNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.greenNormal,
|
|
icon: vecWidget(
|
|
Assets.vecAddSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenNormal
|
|
: AppColor.greenNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
//endregion
|
|
|
|
//region Edit
|
|
RFabOutlined.smallEdit({VoidCallback? onPressed, Key? key})
|
|
: this.small(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecEditSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.smallEditNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.smallNoBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecEditSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.edit({VoidCallback? onPressed, Key? key})
|
|
: this(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecEditSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.editNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecEditSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
//endregion
|
|
|
|
//region Delete
|
|
RFabOutlined.smallDelete({VoidCallback? onPressed, Key? key})
|
|
: this.small(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.redNormal,
|
|
borderColor: AppColor.redNormal,
|
|
icon: vecWidget(
|
|
Assets.vecTrashSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.redNormal
|
|
: AppColor.redNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.smallDeleteNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.smallNoBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.redNormal,
|
|
icon: vecWidget(
|
|
Assets.vecTrashSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.redNormal
|
|
: AppColor.redNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.delete({VoidCallback? onPressed, Key? key})
|
|
: this(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.redNormal,
|
|
borderColor: AppColor.redNormal,
|
|
icon: vecWidget(
|
|
Assets.vecTrashSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.redNormal
|
|
: AppColor.redNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.deleteNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.redNormal,
|
|
icon: vecWidget(
|
|
Assets.vecTrashSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.redNormal
|
|
: AppColor.redNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
//endregion
|
|
|
|
//region Action
|
|
RFabOutlined.smallAction({VoidCallback? onPressed, Key? key})
|
|
: this.small(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecScanSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.smallActionNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.smallNoBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecScanSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.action({VoidCallback? onPressed, Key? key})
|
|
: this(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecScanSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.actionNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecScanSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
//endregion
|
|
|
|
//region Filter
|
|
RFabOutlined.smallFilter({VoidCallback? onPressed, Key? key})
|
|
: this.small(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecFilterSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.smallFilterNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.smallNoBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecFilterSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.filter({VoidCallback? onPressed, Key? key})
|
|
: this(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecFilterSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.filterNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecFilterSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
//endregion
|
|
|
|
//region Download
|
|
RFabOutlined.smallDownload({VoidCallback? onPressed, Key? key})
|
|
: this.small(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecDownloadSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenDark
|
|
: AppColor.greenDark.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.smallDownloadNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.smallNoBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecDownloadSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenDark
|
|
: AppColor.greenDark.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.download({VoidCallback? onPressed, Key? key})
|
|
: this(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecDownloadSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenDark
|
|
: AppColor.greenDark.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.downloadNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecDownloadSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenDark
|
|
: AppColor.greenDark.disabledColor,
|
|
),
|
|
);
|
|
|
|
//endregion
|
|
|
|
//region Excel
|
|
RFabOutlined.smallExcel({VoidCallback? onPressed, Key? key})
|
|
: this.small(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.greenDark,
|
|
borderColor: AppColor.greenDark,
|
|
icon: vecWidget(
|
|
Assets.vecDownloadSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenDark
|
|
: AppColor.greenDark.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.smallExcelNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.greenDark,
|
|
icon: vecWidget(
|
|
Assets.vecDownloadSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenDark
|
|
: AppColor.greenDark.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.excel({VoidCallback? onPressed, Key? key})
|
|
: this(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.greenDark,
|
|
borderColor: AppColor.greenDark,
|
|
icon: vecWidget(
|
|
Assets.vecDownloadSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenDark
|
|
: AppColor.greenDark.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.excelNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.greenDark,
|
|
icon: vecWidget(
|
|
Assets.vecDownloadSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.greenDark
|
|
: AppColor.greenDark.disabledColor,
|
|
),
|
|
);
|
|
|
|
//endregion
|
|
|
|
//region Back
|
|
RFabOutlined.smallBack({VoidCallback? onPressed, Key? key})
|
|
: this.small(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecArrowLeftSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.smallBackNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.smallNoBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecArrowLeftSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.back({VoidCallback? onPressed, Key? key})
|
|
: this(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
borderColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecArrowLeftSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
RFabOutlined.backNoBorder({VoidCallback? onPressed, Key? key})
|
|
: this.noBorder(
|
|
key: key,
|
|
onPressed: onPressed,
|
|
backgroundColor: AppColor.blueNormal,
|
|
icon: vecWidget(
|
|
Assets.vecArrowLeftSvg,
|
|
color:
|
|
onPressed != null
|
|
? AppColor.blueNormal
|
|
: AppColor.blueNormal.disabledColor,
|
|
),
|
|
);
|
|
|
|
//endregion
|
|
}
|
|
|
|
class _RFabOutlinedState extends State<RFabOutlined> {
|
|
bool isOnPressed =false;
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return OutlinedButton(
|
|
onPressed:widget.onPressed ,
|
|
style: ButtonStyle(
|
|
side: WidgetStateProperty.resolveWith<BorderSide?>((states) {
|
|
if (states.contains(WidgetState.disabled)) {
|
|
return BorderSide(
|
|
color:
|
|
widget.borderColor?.disabledColor ??
|
|
AppColor.blueNormal.disabledColor,
|
|
width: 2,
|
|
);
|
|
}
|
|
return BorderSide(
|
|
color: widget.borderColor ?? AppColor.blueNormal,
|
|
width: 2,
|
|
);
|
|
}),
|
|
backgroundColor: WidgetStateProperty.resolveWith<Color?>((states) {
|
|
if (states.contains(WidgetState.pressed)) {
|
|
return widget.backgroundColor;
|
|
} else if (states.contains(WidgetState.hovered)) {
|
|
return widget.backgroundColor.hoverColor ??
|
|
AppColor.blueNormal.hoverColor;
|
|
} else if (states.contains(WidgetState.disabled)) {
|
|
return widget.backgroundColor.disabledColor ??
|
|
AppColor.blueNormal.disabledColor;
|
|
}
|
|
return Colors.transparent;
|
|
}),
|
|
foregroundColor: WidgetStateProperty.resolveWith<Color?>((states) {
|
|
if (states.contains(WidgetState.pressed)) {
|
|
return Colors.white;
|
|
} else if (states.contains(WidgetState.disabled)) {
|
|
return widget.backgroundColor.disabledColor ??
|
|
AppColor.blueNormal.disabledColor;
|
|
}
|
|
return widget.backgroundColor;
|
|
}),
|
|
|
|
shape: WidgetStatePropertyAll(widget.shapeBorder),
|
|
fixedSize: WidgetStatePropertyAll(
|
|
Size(widget.radius ?? 56, widget.radius ?? 56),
|
|
),
|
|
padding: WidgetStatePropertyAll(EdgeInsets.zero),
|
|
),
|
|
child: widget.icon
|
|
);
|
|
}
|
|
}
|
|
|