我使用mysql对我的应用程序中的用户进行身份验证,并登录/注册,当我从登录页面后面的主页注销时,注销可以正常工作,但当我从主页路由的用户页面注销时,则不起作用。
它已在mysql_database上注销,但除非我重新启动,否则页面不会立即返回到调用注销的登录页面。
以下是我的注销功能:
Future<void> logout() async {
print('logout started');
final url = '${PurohitApi().baseUrl}${PurohitApi().login}/$sessionId';
var response = await http.delete(
Uri.parse(url),
headers: {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': accessToken!
},
);
var userStatus = json.decode(response.body);
print(userStatus);
if (authTimer != null) {
authTimer!.cancel();
authTimer = null;
}
print(userStatus);
refreshToken = null;
refreshTokenExpiryDate = null;
notifyListeners();
final prefs = await SharedPreferences.getInstance();
prefs.clear();
}
}
在我的根页面中,我有:
MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.red,
),
home: Consumer<Auth>(builder: (context, value, _) {
print("from material app");
return value.isAuth
? const Welcomescreen()
: FutureBuilder(
future: value.tryAutoLogin(),
builder: (context, snapshot) =>
snapshot.connectionState == ConnectionState.waiting
? CircularProgressIndicator()
: const Adminlogin(),
);
}),
routes: {
'viewPackage': (context) => const ViewPackage(),
'users': (context) => const Users()
因此,如果isAuth为false,那么它不是。如果没有登录,它应该返回到LoginSignUpPage。
下面是我试图重定向的注销按钮
ListTile(
leading: const Icon(Icons.exit_to_app),
title: const Text("Logout"),
onTap: () {
Navigator.pop(context);
Provider.of<Auth>(context, listen: false).logout();
},
您可以制作一个注销的函数,完成后,它会使用Navigator.pushReplacement
将导航推到登录页面,这不允许用户使用后退按钮返回到上一个页面