Làm cách nào để đóng ứng dụng Flutter theo chương trình. Tôi đã thử bật màn hình duy nhất nhưng điều đó dẫn đến màn hình đen.
Làm cách nào để đóng ứng dụng Flutter theo chương trình. Tôi đã thử bật màn hình duy nhất nhưng điều đó dẫn đến màn hình đen.
Câu trả lời:
SystemNavigator.pop()
: KHÔNG HOẠT ĐỘNG
exit(0)
: Hoạt động nhưng Apple có thể TẠM NGỪNG ỨNG DỤNG CỦA BẠN vì nó chống lại các nguyên tắc về Giao diện Con người của Apple để thoát ứng dụng theo chương trình.
SystemNavigator.pop()
: Hoạt động và là cách ĐƯỢC KHUYÊN DÙNG để thoát ứng dụng.
exit(0)
: Cũng hoạt động nhưng nó KHÔNG ĐƯỢC KHUYẾN CÁO vì nó chấm dứt quá trình Dart VM ngay lập tức và người dùng có thể nghĩ rằng ứng dụng vừa gặp sự cố.
exit(0)
cho nhu cầu của bạn.
SystemNavigator.pop()
thoát khỏi ứng dụng của tôi và hiển thị thông báo về sự cố, exit(0)
hoạt động như mong đợi
Dưới đây hoạt động hoàn hảo với tôi trong cả hai Android
và iOS
, tôi đã sử dụng exit(0)
từ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),
),
);
}
CẬP NHẬT Tháng 1 năm 2019 Giải pháp ưa thích là:
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
Như mô tả ở đây
t work for me... I
cố gắng thêm nút thoát vào CupertinoTabScafold. Với () => exit (0), nó đưa ra một màn hình trống với tabbar.
Bạn có thể làm điều này với SystemNavigator.pop()
.
exit(0);
làm việc
SystemNavigator.pop
bị bỏ qua vì hướng dẫn giao diện người của Apple nêu rõ rằng các ứng dụng không được tự thoát ra. Trên Android, nó sẽ hoạt động và được ưu tiên hơn là gọi dart:io
phương thức thoát. Cân nhắc nộp một vấn đề: github.com/flutter/flutter/issues/new
Các câu trả lời đã được cung cấp nhưng vui lòng không chỉ sao chép, dán những câu đó vào cơ sở mã của bạn mà không biết bạn đang làm gì:
Nếu bạn sử dụng SystemChannels.platform.invokeMethod('SystemNavigator.pop');
lưu ý rằng tài liệu đang đề cập rõ ràng:
Hướng dẫn trình điều hướng hệ thống xóa hoạt động này khỏi ngăn xếp và quay lại hoạt động trước đó.
Trên iOS, các lệnh gọi đến phương thức này bị bỏ qua vì hướng dẫn giao diện người của Apple nêu rõ rằng các ứng dụng không được tự thoát ra.
Bạn có thể sử dụng exit(0)
. Và điều đó sẽ kết thúc quá trình Dart VM ngay lập tức với mã thoát đã cho. Nhưng hãy nhớ rằng tài liệu nói:
Điều này không đợi bất kỳ hoạt động không đồng bộ nào kết thúc. Sử dụng exit do đó rất dễ bị mất dữ liệu.
Dù sao bác sĩ cũng đã lưu ý SystemChannels.platform.invokeMethod('SystemNavigator.pop');
:
Phương thức này nên được ưu tiên hơn là gọi phương thức thoát của dart: io, vì phương thức này có thể khiến nền tảng bên dưới hoạt động như thể ứng dụng đã bị lỗi.
Vì vậy, hãy ghi nhớ những gì bạn đang làm.
Tôi thích sử dụng hơn
Future.delayed(const Duration(milliseconds: 1000), () {
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
});
Mặc dù, exit (0) cũng hoạt động nhưng ứng dụng đóng đột ngột và trông không đẹp mắt, có vẻ như ứng dụng đã bị lỗi.
Future.delayed(const Duration(milliseconds: 1000), () {
exit(0);
});
Điều này đã làm việc cho tôi;
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),
),
);
}
Dưới đây hoạt động hoàn hảo với tôi trong cả Android và iOS nhập 'dart: 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),
),
);
}
SystemNavigator.pop()
không hoạt động trong iOS, vui lòng đọc câu trả lời của tôi. Không có cách nào để thoát khỏi ứng dụng iOS ít nhất là cho đến hôm nay.
SystemNavigator.pop()
không hoạt động trong trình giả lập Android. Ứng dụng vẫn đang hoạt động trong nền. Vì vậy, tôi không chắc liệu nó có hoạt động bình thường trên thiết bị thực hay không.