flutter中的异步函数不会返回null

问题描述 投票:0回答:2

我正在尝试检查用户的登录名。但是,即使在if条件下,即使返回null,checklogin()也不等于null。

class HomeScreen extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        if(checkLogin() == null) {
          return Login();
        } else {
          return Dashboard();
        }
      }
      Future<String> checkLogin() async {
        var prefs = await SharedPreferences.getInstance();
        var key = 'Token';
        var value = prefs.getString(key);
        print(value);  
        return value;
      }
    }
flutter dart
2个回答
2
投票

我刚刚使用了将来的构建器,该构建器管理通过AsyncSnapshot从将来返回的数据。

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

       return FutureBuilder(
        future: checkLogin(),
        builder: (BuildContext context, AsyncSnapshot snapshot){


        if (snapshot.hasData){
           var value = snapshot.data;
           if(value == null){
              return Login();
             }else{
              return Dashboard();
             }
        }else return Dashboard();
      }
    );
  }




      Future<String> checkLogin() async {
        var prefs = await SharedPreferences.getInstance();
        var key = 'Token';
        var value = prefs.getString(key);
        print(value);  
        return value;

      }
    }

0
投票

问题是checkLogin函数异步并返回Future,您将等待并且直接在构建中等待。

因此,这是一个更好,更正确的实现。”

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  bool isLogin = false;

  @override
  void initState() {
    checkLogin();
    super.initState();
  }

  checkLogin() async {
    var prefs = await SharedPreferences.getInstance();
    var key = 'Token';
    var value = prefs.getString(key) ?? false;
    setState(() {isLogin = value;});
  }

  @override
  Widget build(BuildContext context) {
    return isLogin ? Login() : Dashboard();
  }
}

``

© www.soinside.com 2019 - 2024. All rights reserved.