我是 Flutter 和 REST API 的新手,所以请放轻松。我的应用程序应该根据我学到的 YouTube 视频保存它的状态。但是,当我登录并退出应用程序时,下次我打开应用程序时,它不是从主页开始,而是从登录页面开始。如果用户上次没有注销,它应该保存用户的状态并从主页开始。
这是我的主页代码:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (BuildContext context) => UserData(),
child: MaterialApp(
title: 'Curtain App',
debugShowCheckedModeBanner: false,
home: FutureBuilder(
future: AuthService.getToken(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
if (snapshot.hasData) {
Provider.of<UserData>(context).currentUserId = snapshot.data.uid;
return HomeScreen();
} else {
return LoginScreen();
}
},
),
),
);
}
}
这是我使用 Session 保存状态的代码:
static setToken(String token, String refreshToken) async {
_AuthData data = _AuthData(token, refreshToken);
await SESSION.set('tokens', data);
}
static Future<String> getToken() async {
return await SESSION.get('tokens');
}
static removeToken() async {
await SESSION.prefs.clear();
}
class _AuthData {
String token, refreshToken;
_AuthData(this.token, this.refreshToken);
// toJson
// required by Session lib
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
data['token'] = token;
data['refreshToken'] = refreshToken;
return data;
}
最后,这是我的登录页面逻辑:
var user = await DatabaseService.loginUser(_username, _password);
final data = json.decode(user);
print("Hi ${data['username']}");
print("Status ${data['status']}");
print("Token ${data['token']}");
if (data['username'] != null) {
AuthService.setToken(data['token'], data['refreshToken']);
Navigator.push(//code);
}
如果您对如何修复它有任何想法,请告诉我。和平...