Bir Flutter uygulamasını programlı olarak nasıl kapatabilirim. Tek ekranı açmayı denedim ama bu siyah bir ekranla sonuçlanıyor.
Bir Flutter uygulamasını programlı olarak nasıl kapatabilirim. Tek ekranı açmayı denedim ama bu siyah bir ekranla sonuçlanıyor.
Yanıtlar:
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 .
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.
exit(0)
için deneyebilirsin .
SystemNavigator.pop()
uygulamamdan çıkıyor ve bir kilitlenme mesajı gösteriyor, exit(0)
beklendiği gibi çalışıyor
Aşağıda hem benimle mükemmel çalıştı Android
ve iOS
ben 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
t work for me... I
m CupertinoTabScafold bir çıkış düğmesi eklemek için çalışıyor. () => Exit (0) ile sekme çubuğu ile boş ekran verir.
Bunu ile yapabilirsiniz SystemNavigator.pop()
.
exit(0);
işe yarıyor
SystemNavigator.pop
Apple'ı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
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.
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);
});
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),
),
);
}
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),
),
);
}
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.
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.