Флаттер программно закрывает приложение, но из appState - PullRequest
0 голосов
/ 05 июля 2018

Ответ здесь показывает выход из приложения через Widget.

Я хочу знать, смогу ли я выйти из initPlatformState(){...}

Специально для моего случая у меня есть ответ bool в initPlatformState(){...}, т.е. bool reqperm = await SimplePermissions.requestPermission(permission);

Я хочу, чтобы, если reqperm имеет значение false, приложение закрывалось.

Полный код:

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 - потрясающий флаттер плагин

1 Ответ

0 голосов
/ 06 июля 2018
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());
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...