93 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| 
								 | 
							
								import 'package:flutter/material.dart';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import '../utils/size_utils.dart';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class customFloatingButton extends StatelessWidget {
							 | 
						||
| 
								 | 
							
								  const customFloatingButton({super.key, 
							 | 
						||
| 
								 | 
							
								    this.shape,
							 | 
						||
| 
								 | 
							
								    this.variant,
							 | 
						||
| 
								 | 
							
								    this.alignment,
							 | 
						||
| 
								 | 
							
								    this.margin,
							 | 
						||
| 
								 | 
							
								    this.onTap,
							 | 
						||
| 
								 | 
							
								    this.width,
							 | 
						||
| 
								 | 
							
								    this.height,
							 | 
						||
| 
								 | 
							
								    this.child,
							 | 
						||
| 
								 | 
							
								    this.color,
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  final FloatingButtonShape? shape;
							 | 
						||
| 
								 | 
							
								  final FloatingButtonVariant? variant;
							 | 
						||
| 
								 | 
							
								  final Alignment? alignment;
							 | 
						||
| 
								 | 
							
								  final EdgeInsetsGeometry? margin;
							 | 
						||
| 
								 | 
							
								  final VoidCallback? onTap;
							 | 
						||
| 
								 | 
							
								  final double? width;
							 | 
						||
| 
								 | 
							
								  final double? height;
							 | 
						||
| 
								 | 
							
								  final Widget? child;
							 | 
						||
| 
								 | 
							
								  final Color? color;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  @override
							 | 
						||
| 
								 | 
							
								  Widget build(BuildContext context) {
							 | 
						||
| 
								 | 
							
								    return alignment != null
							 | 
						||
| 
								 | 
							
								        ? Align(
							 | 
						||
| 
								 | 
							
								            alignment: alignment ?? Alignment.center,
							 | 
						||
| 
								 | 
							
								            child: _buildFabWidget(),
							 | 
						||
| 
								 | 
							
								          )
							 | 
						||
| 
								 | 
							
								        : _buildFabWidget();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Widget _buildFabWidget() {
							 | 
						||
| 
								 | 
							
								    return Padding(
							 | 
						||
| 
								 | 
							
								      padding: margin ?? EdgeInsets.zero,
							 | 
						||
| 
								 | 
							
								      child: FloatingActionButton(
							 | 
						||
| 
								 | 
							
								        backgroundColor: _setColor(),
							 | 
						||
| 
								 | 
							
								        onPressed: onTap,
							 | 
						||
| 
								 | 
							
								        child: child,
							 | 
						||
| 
								 | 
							
								      ),
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  BoxDecoration _buildDecoration() {
							 | 
						||
| 
								 | 
							
								    return BoxDecoration(
							 | 
						||
| 
								 | 
							
								      color: _setColor(),
							 | 
						||
| 
								 | 
							
								      borderRadius: _setBorderRadius(),
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Color _setColor() {
							 | 
						||
| 
								 | 
							
								    if (color != null) {
							 | 
						||
| 
								 | 
							
								      return color!;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    switch (variant) {
							 | 
						||
| 
								 | 
							
								      case FloatingButtonVariant.FillBlueA700:
							 | 
						||
| 
								 | 
							
								        return const Color(0xFF1976D2); // Example color for FillBlueA700
							 | 
						||
| 
								 | 
							
								      default:
							 | 
						||
| 
								 | 
							
								        return Colors.black;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  BorderRadius _setBorderRadius() {
							 | 
						||
| 
								 | 
							
								    switch (shape) {
							 | 
						||
| 
								 | 
							
								      case FloatingButtonShape.RoundedBorder6:
							 | 
						||
| 
								 | 
							
								        return BorderRadius.circular(
							 | 
						||
| 
								 | 
							
								          getHorizontalSize(
							 | 
						||
| 
								 | 
							
								            6.00,
							 | 
						||
| 
								 | 
							
								          ),
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								      default:
							 | 
						||
| 
								 | 
							
								        return BorderRadius.circular(
							 | 
						||
| 
								 | 
							
								          getHorizontalSize(
							 | 
						||
| 
								 | 
							
								            6.00,
							 | 
						||
| 
								 | 
							
								          ),
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								enum FloatingButtonShape {
							 | 
						||
| 
								 | 
							
								  RoundedBorder6,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								enum FloatingButtonVariant {
							 | 
						||
| 
								 | 
							
								  FillBlueA700,
							 | 
						||
| 
								 | 
							
								}
							 |