Ora

How to Make Alert Dialog Rounded in Flutter?

Published in Flutter UI Customization 5 mins read

To make an AlertDialog rounded in Flutter, you primarily use the shape property of the AlertDialog widget and assign it a RoundedRectangleBorder with a specified BorderRadius. This allows you to define custom rounded corners for your dialogs, enhancing their visual appeal.

Understanding the Core Concept

Flutter's AlertDialog widget provides a shape property that accepts a ShapeBorder. By default, an AlertDialog has slightly rounded corners, but you can easily customize this to achieve a more prominent or specific rounded look. The key is to leverage RoundedRectangleBorder to define your desired curvature.

Step-by-Step Guide to Rounding Your AlertDialog

Here’s how you can implement rounded corners for your AlertDialog:

1. Define a Custom Shape with RoundedRectangleBorder

The first step is to create a RoundedRectangleBorder instance. This class allows you to define the border radius for each corner of your dialog.

  • BorderRadius.circular(double radius): Applies a uniform circular radius to all corners. This is the most common and simplest way to achieve rounded corners.
  • BorderRadius.only(...): Allows you to specify different radii for individual corners (e.g., topLeft, topRight, bottomLeft, bottomRight).

Example:

// For uniformly rounded corners
BorderRadius.circular(20.0);

// For specific rounded corners
BorderRadius.only(
  topLeft: Radius.circular(30.0),
  bottomRight: Radius.circular(10.0),
);

2. Apply the Custom Shape to Your AlertDialog

Once you have defined your RoundedRectangleBorder, assign it to the shape property of your AlertDialog.

AlertDialog(
  shape: RoundedRectangleBorder(
    borderRadius: BorderRadius.circular(20.0), // Apply desired radius here
  ),
  title: const Text('Rounded Dialog'),
  content: const Text('This is an alert dialog with rounded corners.'),
  actions: <Widget>[
    TextButton(
      onPressed: () => Navigator.pop(context),
      child: const Text('OK'),
    ),
  ],
);

3. Show the Rounded AlertDialog

Finally, display your AlertDialog using the showDialog function, typically within a button's onPressed callback or another event handler.

ElevatedButton(
  onPressed: () {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(25.0), // More pronounced rounded corners
          ),
          title: const Text('Success!'),
          content: const Text('Your operation was completed successfully.'),
          actions: <Widget>[
            TextButton(
              onPressed: () => Navigator.pop(context),
              child: const Text('Dismiss'),
            ),
          ],
        );
      },
    );
  },
  child: const Text('Show Rounded Alert'),
);

Complete Code Example for a Rounded AlertDialog

Here’s a full example demonstrating how to create and display a RoundedRectangleBorder AlertDialog:

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Rounded AlertDialog Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Rounded Alert Dialog'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            _showRoundedAlertDialog(context);
          },
          child: const Text('Show Rounded Alert Dialog'),
        ),
      ),
    );
  }

  void _showRoundedAlertDialog(BuildContext context) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          // Define the custom shape for the AlertDialog
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(30.0), // Adjust the radius as needed
          ),
          title: const Text(
            'Important Message',
            style: TextStyle(fontWeight: FontWeight.bold),
          ),
          content: const Text(
            'This is a custom alert dialog with significantly rounded corners, demonstrating enhanced visual appeal.',
            textAlign: TextAlign.center,
          ),
          actions: <Widget>[
            TextButton(
              onPressed: () {
                Navigator.of(context).pop(); // Dismiss the dialog
              },
              child: const Text('Got It!'),
            ),
            TextButton(
              onPressed: () {
                // Perform another action
                print('Another action taken!');
                Navigator.of(context).pop();
              },
              child: const Text('Learn More'),
            ),
          ],
        );
      },
    );
  }
}

Customization Options

Beyond simple circular radii, you can further customize your AlertDialog's appearance:

  • Varying Radii: Use BorderRadius.only() for unique designs, like a larger radius on top and smaller on the bottom.
  • Border Side: Add a borderSide to RoundedRectangleBorder for a colored or thicker outline.
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(20.0),
      side: const BorderSide(color: Colors.blue, width: 2.0),
    ),
  • Background Color: The backgroundColor property of AlertDialog can complement your rounded shape.
    AlertDialog(
      backgroundColor: Colors.lightBlue.shade50, // Light background
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(20.0),
      ),
      // ...
    );

Global Theming for Rounded Dialogs

If you want all AlertDialogs in your application to have a consistent rounded shape, you can define it in your application's ThemeData. This avoids repeating the shape property for every AlertDialog.

MaterialApp(
  theme: ThemeData(
    dialogTheme: DialogTheme(
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(16.0), // Global default for all dialogs
      ),
    ),
    // ... other theme properties
  ),
  home: const MyHomePage(),
);

By setting the dialogTheme within your ThemeData, any AlertDialog shown without an explicit shape property will automatically inherit these rounded corners. For more details on theming, refer to the official Flutter ThemeData documentation.

Key Properties for Rounded Dialogs

Here's a quick overview of the essential properties discussed:

Property Description Usage
AlertDialog.shape Defines the visual shape of the dialog, including its corners. shape: RoundedRectangleBorder(...)
RoundedRectangleBorder A ShapeBorder that draws a rectangle with rounded corners. RoundedRectangleBorder(borderRadius: ...)
BorderRadius Specifies the radius for the corners. BorderRadius.circular(radius) or BorderRadius.only(...)
DialogTheme Allows setting a default shape and other properties for all dialogs globally. ThemeData(dialogTheme: DialogTheme(shape: ...))
showDialog Function used to display a material design dialog. showDialog(context: context, builder: (BuildContext context) { return ...; })

By following these steps, you can easily create custom rounded AlertDialogs that seamlessly integrate with your application's design language.