微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

退出应用程序时,Flutter 保存应用程序的状态应用程序在登录主页后从登录页面启动

如何解决退出应用程序时,Flutter 保存应用程序的状态应用程序在登录主页后从登录页面启动

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

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

解决方法

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

if (snapshot.hasData) {
  Provider.of<UserData>(context).currentUserId =snapshot.data.uid;
  if(snapshot.data.uid!=null){
    return HomeScreen();
  } else {
    return LoginScreen();
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?