कैसे एक फ्लैटबटन पर एक AlertDialog को खारिज करने के लिए क्लिक करें?


87

मेरे पास निम्नलिखित है AlertDialog

showDialog(
            context: context,
            child: new AlertDialog(
              title: const Text("Location disabled"),
              content: const Text(
                  """
Location is disabled on this device. Please enable it and try again.
                  """),
              actions: [
                new FlatButton(
                  child: const Text("Ok"),
                  onPressed: _dismissDialog,
                ),
              ],
            ),
        );

मैं _dismissDialog()बर्खास्तगी कैसे कह सकता हूं AlertDialog?

जवाबों:


150

Navigator.pop()चाल चलनी चाहिए। आप यह भी उपयोग कर सकते हैं कि संवाद का परिणाम लौटाएं (यदि यह उपयोगकर्ता को विकल्पों के साथ प्रस्तुत किया गया है)


10
धन्यवाद, कि काम किया। Navigator.pop () कॉल करने से अपेक्षा के अनुरूप संवाद बंद हो जाता है। मेरा वर्तमान ऑनप्रेस्ड इस प्रकार है: onPressed: () => Navigator.pop(context),
on'१३ को गुस्ताश

@ कोल्लिन, मैंने एक अन्य फ़ंक्शन द्वारा डायलॉग बॉक्स दिखाने के लिए एक फ़ंक्शन बनाया है। void showLoader (संदर्भ) {showDialog (संदर्भ: संदर्भ, बिल्डर: (BuildContext संदर्भ) {रिटर्न कंटेनर (चौड़ाई: double.infinity, height: double.infinity, सजावट: BoxDecoration (रंग: Colors.black.withOpacity (0.05),)) , बच्चा: केंद्र (बच्चा: पाठ ('हैलो दोस्त'),),);};); } कृपया मुझे सुझाव दें कि मैं इस शोडियलॉग को कैसे छिपा सकता हूं। धन्यवाद।
कमलेश

मेरे लिए भी काम किया!
डैनियल

76
Navigator.of(context, rootNavigator: true).pop('dialog')

मेरे साथ काम किया।


5
स्वीकृत उत्तर मेरे पूरे पृष्ठ को गायब कर रहा था, यह संवाद छिपाने के लिए उचित उत्तर है
user969068

6
यह संवाद को बंद करने के लिए एक बेहतर तरीका है, मैं समाधान के ऊपर कोशिश कर रहा था लेकिन यह मेरे अन्य दृष्टिकोण को पॉप कर रहा था।
फरहाना

3
स्वीकृत उत्तर मेरे पृष्ठ को भी गायब कर रहा था, यह संवाद छिपाने के लिए उचित उत्तर है।
बेन

जवाब अभी भी पूरे दृश्य को पॉप करने का कारण बनता है।
Karrar Kazuya

रूटनेविगेटर क्या है?
के प्रदीप कुमार रेड्डी

22
Navigator.pop(_)

मेरे लिए काम किया, लेकिन फ़्लटर टीम की गैलरी में एक उदाहरण का उपयोग किया गया है:

Navigator.of(context, rootNavigator: true).pop()

जो काम भी करता है, और मैं उनकी अगुवाई करने के लिए लुभाता हूं।


1
मैं किसी अन्य .dart फ़ाइल से एक कस्टम अलर्टडायॉग कॉल कर रहा हूं और नेविगेटर का उपयोग कर रहा हूं। संदर्भ (rootNavigator: true) .pop (); धन्यवाद का काम किया।
djalmafreestyler

1
मैंने हमेशा पहले संस्करण का उपयोग किया था ... लेकिन बस एक उदाहरण में भाग गया, जहां दूसरे ने किया, लेकिन पहले ने इसके नीचे की स्क्रीन को हटा दिया।
विलियम टेरल

15

यदि आप किसी भी परिणाम को वापस नहीं करना चाहते हैं, तो उनमें से किसी एक का उपयोग करें:

Navigator.of(context).pop();
Navigator.pop(context);

लेकिन अगर आप कुछ परिणाम वापस करना चाहते हैं, तो इसे देखें

उदाहरण:

showDialog(
    context: context,
    builder: (_) {
      return AlertDialog(
        title: Text('Wanna Exit?'),
        actions: [
          FlatButton(
            onPressed: () => Navigator.pop(context, false), // passing false
            child: Text('No'),
          ),
          FlatButton(
            onPressed: () => Navigator.pop(context, true), // passing true
            child: Text('Yes'),
          ),
        ],
      );
    }).then((exit) {
  if (exit == null) return;

  if (exit) {
    // user pressed Yes button
  } else {
    // user pressed No button
  }
});

कोड की इन दो लाइनों के बीच क्या अंतर है ??
के प्रदीप कुमार रेड्डी

@ user3410835 कोई अंतर नहीं, वास्तव Navigator.pop()में पहली पंक्ति कहता है।
CopsOnRoad

AlertDialog को कैसे खारिज किया जाए = गलत? जब मैं डायलॉग के बाहर स्क्रीन पर क्लिक करता हूं तो डायलॉग खारिज नहीं किया जाता है।
के प्रदीप कुमार रेड्डी

@ user3410835 एक संपत्ति है जिसे barrierDismissibleशोयालोग () के नाम पर रखा गया है और आप इसे गलत या सही पर सेट कर सकते हैं।
प्रभावो मूर्ति

6

फ्लैट बटन क्लिक पर अलर्ट डायलॉग को खारिज करने का उदाहरण

RaisedButton(
        onPressed: () {
          showDialog(
              context: context,
              builder: (context) => AlertDialog(
                    title: Text('Are you sure?'),
                    content: Text('Do you want to remove item?'),
                    actions: <Widget>[
                      FlatButton(
                          onPressed: () => Navigator.of(context).pop(false),//  We can return any object from here
                           child: Text('NO')),
                      FlatButton(
                          onPressed: () => Navigator.of(context).pop(true), //  We can return any object from here
                          child: Text('YES'))
                    ],
                  )).then((value) =>
              print('Selected Alert Option: ' + value.toString()));
        },
        child: Text('Show Alert Dialog'),
      ),

उपरोक्त कोड में दो अनूठी चीजें हैं जो डायलॉग के कॉलबैक परिणाम प्रदान करने के लिए उपयोग की जाती हैं

Navigator.of (संदर्भ) .pop (मिथ्या) - जब हम NO नेविगेटर दबाते हैं तो गलत मान लौटाते हैं। (संदर्भ) .pop (सत्य) - जब हमने हां दबाया तो सही मान लौटाएं।

इन रिटर्न वैल्यू के आधार पर, हम इसके बाहर कुछ ऑपरेशन कर सकते हैं या संवाद स्थिति मूल्य बनाए रख सकते हैं


पॉप (झूठा) क्या करेगा? और क्या होगा (सच) पॉप? वैसे भी दोनों मामलों में हम चाहते हैं कि एलर्टडायलॉग को खारिज कर दिया जाए।
के प्रदीप कुमार रेड्डी

@ user3410835: कोड को संशोधित किया है, कृपया एक नज़र डालें
jitsm555

4

यह प्रीफेक्टली काम करता है

      RaisedButton(
                child: Text(
                  "Cancel",
                  style: TextStyle(color: Colors.white),
                ),
                color: Colors.blue,
                onPressed: () => Navigator.pop(context),
              ),

2

आप अपने AlertDialog को चीजों को साफ करने के लिए एक async विधि में लपेट सकते हैं।

  _showAlertConfirmDelete() async {
    // the response will store the .pop value (it can be any object you want)
    var response = await showDialog(
        context: context,
        builder: (context) => AlertDialog(
              title: Text('Warn'),
              content: Text('Really wants to remove the record?'),
              actions: <Widget>[
                FlatButton(
                    onPressed: () => Navigator.of(context)
                        .pop(false), 
                    child: Text('No')),
                FlatButton(
                    onPressed: () => Navigator.of(context).pop(true),
                    child: Text('Yes'))
              ],
            ));
    // do you want to do with the response.
    print(response);
  }

1

उपयोग Navigator.pop(context);

उदाहरण

showDialog(
            context: context,
            child: new AlertDialog(
              title: const Text("Location disabled"),
              content: const Text(
                  """
Location is disabled on this device. Please enable it and try again.
                  """),
              actions: [
                new FlatButton(
                  child: const Text("Ok"),
                  onPressed: () {
                      Navigator.pop(context);
                    },
                ),
              ],
            ),
        );

1

Navigator.of(dialogContext).pop() यदि आप मास्टर से डिटेल पेज पर नेविगेट करते हैं तो आप पेज को बंद कर सकते हैं

                showDialog(
                  context: context,
                  builder: (dialogContext) {
                    return Dialog(
                      child: Column(
                        children: [
                          Text("Content"),
                          RaisedButton(
                            onPressed: () => Navigator.of(dialogContext).pop(),
                            child: Text("Close"),
                          )
                        ],
                      ),
                    );
                  },
                );

0

यदि आप संवाद को पॉप और किसी अन्य दृश्य पर नेविगेट करना चाहते हैं तो यह उत्तर काम करता है। यह भाग ' current_user_location' वह स्ट्रिंग है जिसमें राउटर को यह जानना होता है कि किस पर नेविगेट करना है।

FlatButton(
           child: Text('NO'),
           onPressed: () {
             Navigator.popAndPushNamed(context, 'current_user_location');
              },
           ),

0

अलर्ट डायलॉग के लिए एक अलग संदर्भ बनाने से मदद मिलेगी।

showDialog(
  context: context,
  builder: (alertContext) => AlertDialog(
    title: const Text("Location disabled"),
    content: const Text(
        """Location is disabled on this device. Please enable it and try again."""),
    actions: [
      new FlatButton(
        child: const Text("Ok"),
        onPressed: () => Navigator.pop(alertContext),
      ),
    ],
  ),
);

0

कृपया डायलॉग को बंद करने के लिए कोड का उपयोग करें

RaisedButton(
     onPressed: () { Navigator.of(context).pop();},
     child: Text("Close",style: TextStyle(color: Colors.white), ),
                color: Colors.black,
           )


0

इसने मेरे लिए नेविगेटर.ऑफ (संदर्भ, रूटनावीगेटर: ट्रू) .pop ('डायलॉग') काम किया।

Navigator.pop () बस वर्तमान पृष्ठ / स्क्रीन को बंद करता है।


0

आम तौर पर Navigator.pop(context);काम करता है।

लेकिन यदि एप्लिकेशन में कई नेविगेटर ऑब्जेक्ट हैं और dialogBoxबंद नहीं है, तो यह प्रयास करें

Navigator.of(context, rootNavigator: true).pop();

यदि आप परिणाम कॉल पास करना चाहते हैं, तो प्रयास करें

Navigator.pop(context,result);

या

Navigator.of(context, rootNavigator: true).pop(result)

-3

स्वीकृत उत्तर बताता है कि नेविगेटर क्लास का उपयोग करके एक संवाद को कैसे खारिज किया जाए। नेविगेटर का उपयोग किए बिना एक संवाद को खारिज करने के लिए आप बटन की ऑनप्रेस्ड घटना को निम्न पर सेट कर सकते हैं:

setState((){
  thisAlertDialog = null; 
});

यदि उपरोक्त कोड स्व-व्याख्यात्मक नहीं है, तो यह मूल रूप से फ्लैटबटन के मूल एलर्टडायलॉग को अशक्त करने के लिए सेट कर रहा है, इस प्रकार इसे खारिज कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.