为什么自动登录在 flutter 中不起作用

Why the auto login does not work in flutter

我不想使用 accesstoken 或 refreshtoken,但它不起作用。有人帮我处理这种情况吗?这是我的未来=>

Future<bool> autoLogin() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  var user = prefs.getString('username');
  var pwd = prefs.getString('password');
  debugPrint(user.toString());
  debugPrint(pwd.toString());
  UserResponse account = await LoginApi().login(user, pwd);
  // debugPrint(account.toString());
  bool acc = prefs.containsKey('userInfo');
  return acc;
}

这是我的使用部分=>

home: FutureBuilder<bool>(
          future: autoLogin(),
          builder: (context, snapshot){
            if(snapshot.data == null){
              Future.delayed(Duration(milliseconds: 1000), () {
                setState(() {
                  snapshot.data == false;
                });
              });
              return LoadingScreen();
            }
            return snapshot.data == true ? MainWidget() : LoginScreen();
          },
        ),

当我第一次尝试登录时,它停留在加载屏幕上,snapshot.data 保持为空。它不会改变。

您的 Future.delayed() 没有被等待,所以时间延迟实际上是 no-op 除了稍后推送 setState。

当层开始因一系列异步操作而变得复杂时,是时候看看像 RiverPod(我更喜欢 Provider 和 BLoC)之类的东西来为你提供这些异步操作的包装器,它以可读格式正确级联依赖项。

在 int ctr=0 的 widget 上创建一个实例; 然后你可以这样改:

home: FutureBuilder<bool>(
          future: autoLogin(),
          builder: (context, snapshot){
            if(snapshot.data == null) {
              ctr++;
              if(ctr>1) {
                return LoginScreen();
              }
              else {
                return LoadingScreen();
              }
            }
            return snapshot.data == true ? MainWidget() : LoginScreen();