首页 > 解决方案 > 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 是一个很棒的颤振插件

标签: flutter

解决方案


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());
  }

}

推荐阅读