繁体   English   中英

flutter 中的异步 function 不返回 null

[英]Async function in flutter does not return null

我正在尝试检查用户的登录。 但是,即使在 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;
      }
    }

我刚刚使用了一个未来构建器,它通过 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;

      }
    }

问题是checkLogin function 是异步的并返回 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();
  }
}

``

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM