QOL: toggle elavation

This commit is contained in:
2025-09-22 10:10:35 +02:00
parent d7023b8505
commit 93e10aad46

View File

@@ -8,6 +8,7 @@ class MihToggle extends StatefulWidget {
final Color fillColor; final Color fillColor;
final Color secondaryFillColor; final Color secondaryFillColor;
final bool? readOnly; final bool? readOnly;
final double? elevation;
final void Function(bool) onChange; final void Function(bool) onChange;
const MihToggle({ const MihToggle({
super.key, super.key,
@@ -16,6 +17,7 @@ class MihToggle extends StatefulWidget {
required this.fillColor, required this.fillColor,
required this.secondaryFillColor, required this.secondaryFillColor,
this.readOnly, this.readOnly,
this.elevation,
required this.onChange, required this.onChange,
}); });
@@ -59,49 +61,73 @@ class _MihToggleState extends State<MihToggle> {
), ),
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
Switch( // Material(
value: togglePosition, // elevation: widget.elevation ?? 0.01,
trackOutlineColor: WidgetStateProperty.resolveWith<Color?>( // shadowColor: widget.secondaryFillColor.withOpacity(0.5),
(states) { // color: Colors.transparent,
if (widget.readOnly == true) { // shape: StadiumBorder(),
return Colors.grey; Container(
} decoration: BoxDecoration(
if (states.contains(WidgetState.selected)) { color: Colors.transparent,
return MihColors.getGreenColor( borderRadius: BorderRadius.circular(
30), // Adjust the border radius to match the toggle
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.15),
offset: Offset(
0, widget.elevation ?? 10), // Adjust the vertical offset
blurRadius: widget.elevation ?? 10,
spreadRadius: 0,
),
],
),
child: Switch(
value: togglePosition,
trackOutlineColor: WidgetStateProperty.resolveWith<Color?>(
(states) {
if (widget.readOnly == true) {
return Colors.grey;
}
if (states.contains(WidgetState.selected)) {
return MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"); // Outline color when active
}
return MihColors.getRedColor(
MzansiInnovationHub.of(context)!.theme.mode == MzansiInnovationHub.of(context)!.theme.mode ==
"Dark"); // Outline color when active "Dark"); // Outline color when active
} },
return MihColors.getRedColor( ),
MzansiInnovationHub.of(context)!.theme.mode == activeColor: widget.readOnly == true
"Dark"); // Outline color when active ? Colors.grey
}, : widget.secondaryFillColor,
activeTrackColor: widget.readOnly == true
? Colors.grey.shade400
: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
inactiveThumbColor: widget.readOnly == true
? Colors.grey
: widget.secondaryFillColor,
inactiveTrackColor: widget.readOnly == true
? Colors.grey.shade400
: MihColors.getRedColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
// activeColor: widget.secondaryFillColor,
// activeTrackColor: widget.fillColor,
// inactiveThumbColor: widget.fillColor,
// inactiveTrackColor: widget.secondaryFillColor,
// onChanged: widget.readOnly != true ? widget.onChange : null,
onChanged: widget.readOnly != true
? (newValue) {
setState(() {
togglePosition = newValue; // Update internal state
});
widget.onChange(newValue); // Call the parent's onChange
}
: null,
), ),
activeColor:
widget.readOnly == true ? Colors.grey : widget.secondaryFillColor,
activeTrackColor: widget.readOnly == true
? Colors.grey.shade400
: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
inactiveThumbColor:
widget.readOnly == true ? Colors.grey : widget.secondaryFillColor,
inactiveTrackColor: widget.readOnly == true
? Colors.grey.shade400
: MihColors.getRedColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
// activeColor: widget.secondaryFillColor,
// activeTrackColor: widget.fillColor,
// inactiveThumbColor: widget.fillColor,
// inactiveTrackColor: widget.secondaryFillColor,
// onChanged: widget.readOnly != true ? widget.onChange : null,
onChanged: widget.readOnly != true
? (newValue) {
setState(() {
togglePosition = newValue; // Update internal state
});
widget.onChange(newValue); // Call the parent's onChange
}
: null,
), ),
const SizedBox(width: 10),
], ],
); );
} }