flutterdartflutter-debug

How to solve this error of AlertDialog in Flutter


I'm trying to get the result of this code. I want to show a Confirm AlertDialog with two buttons, One Accepting and Other One Cancelling and want display the result of pressing each button in the debug console. I have read the documentation related to this error but couldn't find anything helpful. You can see the error is in first Image.

This is my Code

import 'dart:async';
import 'package:flutter/material.dart';

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: AlertWidget(),
    );
  }
}

class AlertWidget extends StatelessWidget {
  AlertWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Day Thirteen (Alert Widget)'),
      ),
      body: Center(
        child: Container(
          child: ElevatedButton(
              style: ElevatedButton.styleFrom(backgroundColor: Colors.blue),
              onPressed: () async {

                final field fieldatt = await confirmalertdialogwidget(context);
                print("User Selection $fieldatt");
              },
              child: Text('Basic AlertDialog')),
        ),
      ),
    );
  }
}

enum field { Confirm, Accept }
Future<field> confirmalertdialogwidget(BuildContext context) async{
  showDialog<field>(
      barrierDismissible: true,
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('Confirm'),
          content: Text('This is for notification purpose!!!!'),
          actions: [
            ElevatedButton(
                style: ElevatedButton.styleFrom(backgroundColor: Colors.red),
                onPressed: () {
                  Navigator.of(context).pop(field.Confirm);
                },
                child: Text("Cancel")),
            ElevatedButton(
              onPressed: () {
                Navigator.of(context).pop(field.Accept);
              },
              child: Text('Accept'),
              style: ElevatedButton.styleFrom(backgroundColor: Colors.blue),
            )
          ],
        );
      });
}

Error in Code Error Message


Solution

  • You are not returning the Futrue from the method, and the dialog can be dismissed (Thus, the return is optional):

    Future<field?> confirmalertdialogwidget(BuildContext context) async{
      return showDialog<field>(
          barrierDismissible: true,
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('Confirm'),
              content: Text('This is for notification purpose!!!!'),
              actions: [
                ElevatedButton(
                    style: ElevatedButton.styleFrom(backgroundColor: Colors.red),
                    onPressed: () {
                      Navigator.of(context).pop(field.Confirm);
                    },
                    child: Text("Cancel")),
                ElevatedButton(
                  onPressed: () {
                    Navigator.of(context).pop(field.Accept);
                  },
                  child: Text('Accept'),
                  style: ElevatedButton.styleFrom(backgroundColor: Colors.blue),
                )
              ],
            );
          },
      );
    }
    

    You need to consider naming the Enum and the method based on Dart naming convention