Конвертировать Future <bool>в bool in flutter, чтобы проверить, существует база данных или нет - PullRequest
0 голосов
/ 27 января 2020

Мне нужно конвертировать Future <bool> в bool. Я знаю, что это можно сделать с then и await, но как?

class MyHomeApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    bool isLogin;
    checkDatabase().then((onValue){
      isLogin = onValue;
    });

    if(isLogin) return HomePageScreen();
    if(!isLogin) return SignInScreen();
  }

  Future<bool> checkDatabase() async{
    Directory directory = await getApplicationDocumentsDirectory();
    String path = directory.path + 'koca.db';
    return databaseExists(path);
  }
}

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Вы можете использовать FutureBuilder:

class MyHomeApp extends StatelessWidget {

  Future<bool> get checkDatabase async {
    Directory directory = await getApplicationDocumentsDirectory();
    String path = directory.path + 'koca.db';
    return databaseExists(path);
  }

  @override
  Widget build(BuildContext context) =>
     FutureBuilder(
        future: checkDatabase,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            if (snapshot.hasData) {
              if (snapshot.data) {
                return HomePageScreen();
              } else {
                return SignInScreen();
              }
            }
          }
          return Center(child: CircularProgressIndicator(),);
        },
      );
}
0 голосов
/ 27 января 2020
bool checkDatabase() async{ // change return type to bool
  Directory directory = await getApplicationDocumentsDirectory();
  String path = directory.path + 'koca.db';
  bool exists = await databaseExists(path); // await to get bool value
  return exists; // return bool value
}
...