0

我是 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);
      }

如果您对如何修复它有任何想法,请告诉我。和平...

4

1 回答 1

0

您必须检查您的用户 ID 不能为空。

if (snapshot.hasData) {
  Provider.of<UserData>(context).currentUserId =snapshot.data.uid;
  if(snapshot.data.uid!=null){
    return HomeScreen();
  } else {
    return LoginScreen();
  }
}
于 2021-02-15T10:01:29.720 回答