为什么自动登录在 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();
我不想使用 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();