In this post, we will create a customizable button component in Flutter using the ElevatedButton
widget. This component will allow us to create buttons with text, icon, and customize various aspects like color, text size, and button width.
import 'package:flutter/material.dart'; import '../util/constants/Colors.dart'; class Button extends StatelessWidget { final Color? color; // Now optional and can be null final Color? textColor; final int? textSize; final double? width; final bool? fullWidth; final String text; final IconData? icon; // Now optional and can be null final VoidCallback onPressed; const Button({ Key? key, this.color, // Color is now optional this.textColor, this.textSize, this.width, this.fullWidth, required this.text, this.icon, // Icon is now optional required this.onPressed, }) : super(key: key); @override Widget build(BuildContext context) { return Container( width: fullWidth != null && fullWidth == true ? double.infinity : null, // If fullWidth is true, button width is maximum height: width != null ? width : 50, // Adjust button height child: ElevatedButton( onPressed: onPressed, child: Row( mainAxisSize: MainAxisSize.min, children: [ icon != null ? Icon( icon, size: 24, color: textColor != null ? textColor : ColorsApp.white, ) // Icon size : Container(), // If no icon, show an empty container icon != null ? SizedBox(width: 12) : SizedBox.shrink(), Text( text, style: TextStyle( fontSize: textSize != null ? textSize!.toDouble() : 18, // Text size color: Colors.white, fontWeight: FontWeight.bold, // Font weight ), // Adjust text size and weight ), ], ), style: ElevatedButton.styleFrom( primary: color != null ? color : ColorsApp.customColor, // Button color shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), // Rounded button corners ), ), ), ); } }
Now that we have created the customizable button component, we can easily use it anywhere in our application. Below is an example of how to use it:
import 'package:flutter/material.dart'; import 'path/to/button.dart'; // Importing the button component class MyPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('My App'), ), body: Center( child: Button( text: 'Press', onPressed: () { // Action on button press print('Button pressed'); }, ), ), ); } }