स्पंदन कैसे प्रोग्राम से बाहर निकलें एप्लिकेशन को


102

मैं प्रोग्राम को फ़्लटर एप्लिकेशन को कैसे बंद कर सकता हूं। मैंने केवल स्क्रीन को पॉप करने की कोशिश की है, लेकिन इसका परिणाम काली स्क्रीन है।

जवाबों:


57

IOS के लिए

SystemNavigator.pop(): काम नहीं करता है

exit(0): काम करता है, लेकिन ऐप्पल प्रोग्राम से बाहर निकलने के लिए ऐप्पल ह्यूमन इंटरफेस दिशानिर्देशों के खिलाफ है क्योंकि ऐप्पल आपके ऐप को SUSPEND कर सकता है ।


एंड्रॉयड के लिए

SystemNavigator.pop(): काम करता है और है अनुशंसित एप्लिकेशन बाहर निकलने के रास्ते।

exit(0): इसके अलावा काम करता है लेकिन यह विश्वसनीय नहीं है क्योंकि यह डार्ट वीएम प्रक्रिया को तुरंत समाप्त कर देता है और उपयोगकर्ता सोच सकता है कि ऐप बस दुर्घटनाग्रस्त हो गया।


1
ऐसा लगता है कि SystemNavigator.pop()एंड्रॉइड एमुलेटर के तहत काम नहीं कर रहा है। ऐप अभी भी बैकग्राउंड में काम कर रहा है। इसलिए मुझे यकीन नहीं है कि यह वास्तविक डिवाइस पर ठीक से काम करेगा।
बम्बिनोयूए

2
@AleksTi यह केवल ऐप से बाहर निकलता है, यह VM प्रक्रिया को बंद नहीं करता है। आप exit(0)अपनी जरूरत के लिए कोशिश कर सकते हैं ।
CopsOnRoad

SystemNavigator.pop()मेरे ऐप से बाहर निकलता है और दुर्घटना का एक संदेश दिखाता है, exit(0)उम्मीद के
मुताबिक

138

नीचे दोनों में मेरे साथ पूरी तरह से काम किया Androidऔर iOS, मैं से इस्तेमाल exit(0)कियाdart:io

import 'dart:io';

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new ... (...),
          floatingActionButton: new FloatingActionButton(
            onPressed: ()=> exit(0),
            tooltip: 'Close app',
            child: new Icon(Icons.close),
          ), 
    );
  }

अद्यतन जनवरी 2019 पसंदीदा समाधान है:

SystemChannels.platform.invokeMethod('SystemNavigator.pop');

जैसा यहाँ बताया गया है


कि t work for me... Iक्यूपर्टिनोटैबकैफोल्ड के लिए एक निकास बटन जोड़ने की कोशिश नहीं कर रहा था। के साथ () => निकास (0), यह टैबबार के साथ एक रिक्त स्क्रीन देता है।
रिकार्डो BRGWeb

3
यह काम करता हैं। लेकिन ऐप्पल ने कस्टम एग्जिट बटनों को प्रतिबंधित कर दिया है और अगर आपके पास एक है तो शायद आप ऐप को अस्वीकार कर देंगे
डिमा रोस्तोपिरा

@HasanAYousef मेरे समाधान में संदेश प्राप्त करें अपरिभाषित नाम SystemChannels
user_odoo

36

आप इसके साथ कर सकते हैं SystemNavigator.pop()


1
Android और iOS दोनों पर कुछ नहीं होता है। का उपयोग कर exit(0);काम करता है
थियो बूवमैन

2
IOS पर, SystemNavigator.popनजरअंदाज कर दिया जाता है क्योंकि Apple के मानव इंटरफ़ेस दिशानिर्देश बताते हैं कि अनुप्रयोगों को खुद से बाहर नहीं निकलना चाहिए। एंड्रॉइड पर, इसे काम करना चाहिए, और कॉलिंग dart:ioएग्जिट विधि से अधिक पसंद किया जाता है । एक मुद्दे को दर्ज करने पर विचार करें: github.com/flutter/flutter/issues/new
कॉलिन जैक्सन

IOS के लिए कोई भी विचार हम स्पंदन में कैसे कर सकते हैं?
iPatel

@iPatel आप iOS के लिए निकास (0) का उपयोग कर सकते हैं, बस।
CopsOnRoad

यो लेकिन अस्वीकृति के बारे में क्या? (जैसा कि आपने ऊपर टिप्पणी में कहा था
iPatel

31

उत्तर पहले से ही दिए गए हैं, लेकिन कृपया अपने कोड आधार में उन पेस्ट को कॉपी न करें, जो यह जानते हुए कि आप क्या कर रहे हैं:

यदि आप SystemChannels.platform.invokeMethod('SystemNavigator.pop');ध्यान दें कि डॉक्टर स्पष्ट रूप से उल्लेख कर रहे हैं:

सिस्टम नेविगेटर को निर्देश देता है कि वह इस गतिविधि को स्टैक से हटाए और पिछली गतिविधि पर वापस लौटे।

IOS पर, इस पद्धति की कॉल को अनदेखा कर दिया जाता है क्योंकि Apple के मानव इंटरफ़ेस दिशानिर्देश बताते हैं कि अनुप्रयोगों को स्वयं से बाहर नहीं निकलना चाहिए।

आप उपयोग कर सकते हैं exit(0)। और वह दिए गए निकास कोड के साथ डार्ट वीएम प्रक्रिया को तुरंत समाप्त कर देगा। लेकिन याद रखें कि डॉक्टर कहते हैं:

यह किसी भी अतुल्यकालिक संचालन के समाप्त होने की प्रतीक्षा नहीं करता है। इसलिए बाहर निकलने का उपयोग करने से डेटा खोने की बहुत संभावना है।

वैसे भी डॉक्टर ने भी नोट किया SystemChannels.platform.invokeMethod('SystemNavigator.pop');:

इस पद्धति को कॉलिंग डार्ट से अधिक पसंद किया जाना चाहिए: io का निकास विधि, जैसा कि बाद वाला अंतर्निहित प्लेटफॉर्म कार्य करने का कारण हो सकता है जैसे कि अनुप्रयोग क्रैश हो गया था।

इसलिए, याद रखें कि आप क्या कर रहे हैं।


10
आपने इतने सारे चालाक नोट लिखे लेकिन ... नीचे वर्णित iOS में संभावित निलंबन के बिना प्रोग्राम से प्रोग्राम से बाहर निकलने का सही तरीका क्या है ?
बम्बिनोयूए

4

मैं उपयोग करना पसंद करता हूं

 Future.delayed(const Duration(milliseconds: 1000), () {
        SystemChannels.platform.invokeMethod('SystemNavigator.pop');
      });

हालाँकि, एग्जिट (0) भी काम करता है लेकिन ऐप अचानक बंद हो जाता है और अच्छा नहीं लगता है, ऐसा लगता है कि ऐप क्रैश हो गया है।

 Future.delayed(const Duration(milliseconds: 1000), () {
       exit(0);
      });

2

इसने मेरे लिए काम किया;

import 'dart:io';

@override
Widget build(BuildContext context) {
  return new Scaffold(
    appBar: new AppBar(
      title: new Text(widget.title),
    ),
    body: new ... (...),
      floatingActionButton: new FloatingActionButton(
        onPressed: ()=> exit(0),
        tooltip: 'Close app',
        child: new Icon(Icons.close),
      ), 
  );
}

-1

नीचे मेरे साथ एंड्रॉइड और iOS दोनों आयात 'डार्ट: io' में पूरी तरह से काम किया गया;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new ... (...),
          floatingActionButton: new FloatingActionButton(
            onPressed: ()=> SystemNavigator.pop(),
            tooltip: 'Close app',
            child: new Icon(Icons.close),
          ), 
    );
  }

1
SystemNavigator.pop()iOS में काम नहीं करता, कृपया मेरा उत्तर पढ़ें। कम से कम आज के रूप में iOS ऐप में बाहर निकलने का कोई तरीका नहीं है।
कोप्सऑनराड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.