Uygulamadan programlı olarak nasıl çıkılacağını çırpın


104

Bir Flutter uygulamasını programlı olarak nasıl kapatabilirim. Tek ekranı açmayı denedim ama bu siyah bir ekranla sonuçlanıyor.

Yanıtlar:


58

İOS için

SystemNavigator.pop(): ÇALIŞMIYOR

exit(0): Çalışır ancak Apple, programlı olarak uygulamadan çıkmak Apple İnsan Arayüzü kurallarına aykırı olduğu için UYGULAMANIZI ASKIYA ALABİLİR .


Android için

SystemNavigator.pop(): Çalışır ve uygulamadan çıkmanın ÖNERİLEN yoludur.

exit(0): Ayrıca çalışıyor ama oluyor ÖNERİLMEZ hemen Dart VM sürecini sonlandırır ve kullanıcı uygulaması çöktü var olduğunu sandığı gibi.


1
Görünüşe SystemNavigator.pop()göre Android öykünücüsü altında çalışmıyor. Uygulama hala arka planda çalışıyor. Bu yüzden gerçek cihazda düzgün çalışıp çalışmayacağından emin değilim.
BambinoUA

2
@AleksTi Uygulamadan basitçe çıkar, VM sürecini kapatmaz. İhtiyacın exit(0)için deneyebilirsin .
CopsOnRoad

SystemNavigator.pop()uygulamamdan çıkıyor ve bir kilitlenme mesajı gösteriyor, exit(0)beklendiği gibi çalışıyor
Shanks

140

Aşağıda hem benimle mükemmel çalıştı Androidve iOSben kullanılan exit(0)dandart: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),
          ), 
    );
  }

GÜNCELLEME Ocak 2019 Tercih edilen çözüm:

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

Olarak tarif burada


vermedin o t work for me... Im CupertinoTabScafold bir çıkış düğmesi eklemek için çalışıyor. () => Exit (0) ile sekme çubuğu ile boş ekran verir.
Ricardo BRGWeb

3
İşe yarıyor. Ancak Apple, özel çıkış düğmelerini yasaklıyor ve varsa muhtemelen uygulamayı reddedecek
Dima Rostopira

@HasanAYousef Benim çözümümde, tanımsız ad
Sistem Kanalları

36

Bunu ile yapabilirsiniz SystemNavigator.pop().


1
Hem Android hem de iOS'ta hiçbir şey olmuyor. Kullanmak exit(0);işe yarıyor
Theo Bouwman

2
İOS'ta, SystemNavigator.popApple'ın insan arayüzü yönergeleri uygulamaların kendiliğinden çıkmaması gerektiğini belirttiği için göz ardı edilir. Android'de çalışmalıdır ve aramanın dart:ioçıkış yöntemine tercih edilir . Bir sorun başvurusunda bulunmayı düşünün: github.com/flutter/flutter/issues/new
Collin Jackson

İOS için flutter'da nasıl yapabiliriz?
iPatel

@iPatel iOS için exit (0) kullanabilirsiniz, işte bu.
CopsOnRoad

Yo peki ya reddedilme; (yukarıdaki yorumda da söylediğin gibi
iPatel

32

Cevaplar zaten sağlanmıştır, ancak lütfen ne yaptığınızı bilmeden bunları kopyalayıp kod tabanınıza yapıştırmayın:

SystemChannels.platform.invokeMethod('SystemNavigator.pop');Not kullanırsanız, bu dokümanın açıkça bahsettiği:

Sistem gezginine bu etkinliği yığından kaldırması ve önceki etkinliğe geri dönmesi talimatını verir.

İOS'ta bu yönteme yapılan çağrılar yok sayılır çünkü Apple'ın insan arayüzü yönergeleri, uygulamaların kendiliğinden çıkmaması gerektiğini belirtir.

Kullanabilirsiniz exit(0). Ve bu, verilen çıkış koduyla Dart VM işlemini hemen sonlandıracaktır. Ancak doktorun şöyle dediğini unutmayın :

Bu, zaman uyumsuz işlemlerin sona ermesini beklemez. Çıkışı kullanmak bu nedenle veri kaybetme olasılığı çok yüksektir.

Her neyse, doktor şunu da not etti SystemChannels.platform.invokeMethod('SystemNavigator.pop');:

Bu yöntem, dart: io'nun çıkış yöntemini çağırmak yerine tercih edilmelidir, çünkü ikincisi, temeldeki platformun uygulama çökmüş gibi davranmasına neden olabilir.

Bu yüzden ne yaptığınızı unutmayın.


10
Çok fazla akıllı not yazdınız ama ... iOS'ta olası askıya alma olmadan uygulamadan programlı olarak çıkmanın doğru yolu aşağıda açıklandığı gibi nedir?
BambinoUA

5

Kullanmayı tercih ederim

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

Çıkış (0) da çalışıyor ancak uygulama aniden kapanıyor ve hoş görünmese de, uygulama çökmüş gibi görünüyor.

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

2

Bu benim için çalıştı;

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

Aşağıda hem Android hem de iOS içe aktarma 'dart: io'da benimle mükemmel çalıştı;

  @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'ta çalışmıyor, lütfen cevabımı okuyun. En azından bugün itibariyle iOS uygulamasında çıkış yapmanın bir yolu yok.
CopsOnRoad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.