ImageButton
A customizable button widget composed of two images.
About
ImageButton is a simple plugin that allows you to create buttons using images with two states: pressed and unpressed. It is designed for use cases where you want a button that visually responds to user interaction with images.
How to Use ImageButton
Widget build(BuildContext context) {
  return ImageButton(
    child: Row(
      children: [
        Icon(Icons.star, color: Colors.white),
        Text("Click Me", style: TextStyle(color: Colors.white))
      ],
    ),
    width: 100,
    height: 50,
    pressedImage: Image.asset("assets/pressed.png"),
    unpressedImage: Image.asset("assets/unpressed.png"),
    onTap: () {
      print('Button pressed!');
    },
  );
}
ImageButton Properties
| Property | Type | Description | 
|---|---|---|
| child | Widget? | Custom widget to display inside the button. Preferred over children. | 
| children | List<Widget> | Widgets to be displayed inside the button (deprecated, use childinstead). | 
| unpressedImage | Image | The image displayed when the button is not pressed. | 
| pressedImage | Image | The image displayed when the button is pressed. | 
| label | Widget? | An optional label widget displayed below the button. | 
| onTap | VoidCallback? | Callback function triggered when the button is tapped. | 
| width | double? | Width of the button. | 
| height | double? | Height of the button. | 
| mainAxisAlignment | MainAxisAlignment | How the children are aligned horizontally. Default is MainAxisAlignment.center. | 
| crossAxisAlignment | CrossAxisAlignment | How the children are aligned vertically. Default is CrossAxisAlignment.center. | 
| isEnabled | bool | Determines if the button is interactable. Default is true. | 
| isLoading | bool | Shows a loading indicator if set to true. Default isfalse. | 
| loadingIndicator | Widget? | Custom widget to show as the loading indicator. Defaults to CircularProgressIndicator(). | 
| loadingColor | Color? | Color of the loading indicator if isLoadingis set totrue. Defaults tonull. | 
Example Use Case
Here is an example showcasing how to use ImageButton in a practical scenario:
import 'package:flutter/material.dart';
import 'package:imagebutton/imagebutton.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("ImageButton Example")),
        body: Center(
          child: ImageButton(
            child: Row(
              children: [
                Icon(Icons.thumb_up, color: Colors.white),
                SizedBox(width: 5),
                Text("Like", style: TextStyle(color: Colors.white))
              ],
            ),
            width: 120,
            height: 50,
            pressedImage: Image.asset("assets/button_pressed.png"),
            unpressedImage: Image.asset("assets/button_unpressed.png"),
            isLoading: false,
            onTap: () {
              print("Button Pressed");
            },
          ),
        ),
      ),
    );
  }
}
Example Animation
Below is an example animation of the ImageButton in action:

Contributions
Contributions are welcome! Feel free to fork the repository and submit a pull request for any enhancements or bug fixes.
License
This project is licensed under the MIT License. See the LICENSE file for details.