Flutter Future <bool>Я хочу вернуть логическое значение - PullRequest
0 голосов
/ 12 марта 2020

Я новичок во Flutter, пытаюсь получить его из класса StatelessWidget, но он не позволяет мне получить возвращаемое значение из метода Future. Как мне получить возвращаемое значение?

class HomePage extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
  Widget _defaultPage = userLogin();
  var loginStatus = isLoggedIn();
  print(loginStatus);
    if(loginStatus == true){
      _defaultPage = NoteList();
    }
  return MaterialApp(
        theme: ThemeData(
          primarySwatch: Colors.purple,
        ),
        debugShowCheckedModeBanner: false,
        title: "User notes",
        home: _defaultPage,
        routes: <String, WidgetBuilder> {
          '/login': (BuildContext context) => new userLogin(),
          '/note_list' : (BuildContext context) => new NoteList(),
          '/note_detail' : (BuildContext context) => new NoteDetail(),
        },
      );
  }
}

Метод будущего:

Future<bool> isLoggedIn() async{
  SharedPreferences sharedPreferences;
  sharedPreferences = await SharedPreferences.getInstance();
  String userId = sharedPreferences.getString("userId");
  bool isLogin = sharedPreferences.getBool("userLoggedIn");
  return isLogin;
}

Но в журнале постоянно говорится об экземпляре «Будущее».

1 Ответ

1 голос
/ 12 марта 2020

Вам следует подождать до конца sh.

// in async function
var loginStatus = await isLoggedIn();

или

var loginStatus;

isLoggedIn().then((onValue){
   loginStatus = onValue;
})

, в вашем случае вы должны использовать будущего строителя

home: FutureBuilder<bool>(
        future: isLoggedIn(),
        builder: (context, snapshot){
        if(snapshot.hasData){
          return snapshot.data ? NoteList() : userLogin();
        }
        return CircularProgressIndicator();
      })

РЕДАКТИРОВАТЬ:

Future<bool> isLoggedIn() async {
  final sharedPreferences = await SharedPreferences.getInstance();
  final isContains = sharedPreferences.containsKey("userLoggedIn");

  return isContains
      ? sharedPreferences.getBool("userLoggedIn")
      : throw NullThrownError();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...