flutter - Flutter 以编程方式关闭应用程序但从 appState
问题描述
这里的答案显示了通过 Widget 退出的应用程序。
我想知道,如果我可以退出initPlatformState(){...}
具体到我的情况,我有布尔响应,initPlatformState(){...}
即bool reqperm = await SimplePermissions.requestPermission(permission);
我想要的是,如果 reqperm 为假,则应用程序退出。
完整代码:
class StartPlayer extends StatefulWidget{
@override
appState createState() => new appState();
}
class appState extends State<StartPlayer>{
String _platformVersion = 'Unknown';
Permission permission;
Songs songS;
bool loading = true;
var allsongs;
@override
void initState() {
// TODO: implement initState
super.initState();
initPlatformState();
}
initPlatformState() async {
loading = true;
String platformVersion;
try {
platformVersion = await SimplePermissions.platformVersion;
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
bool chkperm = await SimplePermissions.checkPermission(permission);
if(chkperm) {
try {
allsongs = await methodsMP.allSongs();
} catch (e) {
print("Fials to load songs : '${e.message}'.");
}
}
else{
bool reqperm = await SimplePermissions.requestPermission(permission);
if(reqperm){
try {
allsongs = await methodsMP.allSongs();
} catch (e) {
print("Fials to load songs : '${e.message}'.");
}
}
else{
//I want to exit App Now.Cause setState depends upon allsongs
}
}
loading= false;
print(allsongs);
if (!mounted) return;
setState((() {
songS = new Songs(new List.from(allsongs));
}));
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
songS.audioPlayer.stop();
}
@override
Widget build(BuildContext context) {
return new playerstate(allsongs,loading,new mainView());
}
}
我能做些什么来实现它?我只是颤振的新手。谢谢你的帮助。
虽然 SimplePermission 是一个很棒的颤振插件
解决方案
import 'dart:io';
class StartPlayer extends StatefulWidget{
@override
appState createState() => new appState();
}
class appState extends State<StartPlayer>{
String _platformVersion = 'Unknown';
Permission permission;
Songs songS;
bool loading = true;
var allsongs;
@override
void initState() {
// TODO: implement initState
super.initState();
initPlatformState();
}
initPlatformState() async {
loading = true;
String platformVersion;
try {
platformVersion = await SimplePermissions.platformVersion;
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
bool chkperm = await SimplePermissions.checkPermission(permission);
if(chkperm) {
try {
allsongs = await methodsMP.allSongs();
} catch (e) {
print("Fials to load songs : '${e.message}'.");
}
}
else{
bool reqperm = await SimplePermissions.requestPermission(permission);
if(reqperm){
try {
allsongs = await methodsMP.allSongs();
} catch (e) {
print("Fials to load songs : '${e.message}'.");
}
}
else{
//I want to exit App Now.Cause setState depends upon allsongs
exit(0); // or non-zero for some error code
}
}
loading= false;
print(allsongs);
if (!mounted) return;
setState(() {
songS = new Songs(new List.from(allsongs));
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
songS.audioPlayer.stop();
}
@override
Widget build(BuildContext context) {
return new playerstate(allsongs,loading,new mainView());
}
}
推荐阅读
- java - 只要条形对于 MPAndroidChart 来说不是太小,如何使条形值显示在图表内?
- node.js - 如果我关闭终端窗口,socket.io 服务器会停止运行吗?
- spring - 带有 S3 后端的 Spring Cloud Config Server 中缺少属性源
- java - 如何在 apache ignite 队列上实现消费者生产者?
- android - 如何正确授予打开通过 OpenDocument() 获得的文件的权限?
- vuejs2 - 我们如何在 vuetiy 中拥有多个它们?
- php - 如何更新嵌套 Laravel 集合中的嵌套值
- mysql - Laravel查询goup by,multipe coulmn count with groupby
- swift - Xcode 13 beta 5 错误:UIViewController 缺少初始化期间填充的初始特征集合
- scala - 如何通过从提供自定义架构的表中派生来定义数据框的架构?