【问题标题】:Passing token in Flutter from auth to http-request将 Flutter 中的令牌从 auth 传递到 http-request
【发布时间】:2021-06-30 00:35:54
【问题描述】:

如何将上述代码中的令牌值作为变量传递到另一个屏幕到 http-request 中。

class AppStarted extends AuthenticationEvent {}

class LoggedIn extends AuthenticationEvent {
  final String token;

  const LoggedIn({@required this.token});

  @override
  List<Object> get props => [token];

  @override
  String toString() => 'LoggedIn { token: $token }';

}

感谢您的帮助,已经坚持了 2 个小时...

【问题讨论】:

  • 请将代码的另一半发布到您要传递或提取令牌的位置。
  • 你能提供更多代码的细节吗?
  • @BigWatanga 在其他页面上我做了一个简单的 http 请求,我需要令牌变量。问题是,要共享的代码太多了。
  • @HuthaifaMuayyad 在其他页面上我做了一个简单的 http 请求,我需要令牌变量。问题是,要共享的代码太多了。
  • 我们的意思是,您是否在其他页面中捕获令牌?并尝试将其发送到这里?我们不需要您的令牌,没有人对秘密令牌感兴趣,但我们必须知道您正在说服的方法才能帮助您调试问题。

标签: flutter dart


【解决方案1】:

first create a class where your where https request handle &amp; token store

class Network {
      var  token;
    final string base= "/api";
     //token get when needed 
 _getToken() async {
    SharedPreferences localStorage = await SharedPreferences.getInstance();
     var user = jsonDecode(localStorage.getString('data'));
     token = user['token'];
     }

    //signup 
  signUp(data, apiUrl) async {
    var fullUrl = baseUrl + apiUrl;
    return await http.post(fullUrl,
    body: jsonEncode(data), headers: _setHeaders());
    }

  //login
   signIn(apiUrl) async {
   var fullUrl = baseUrl + apiUrl;
    await _getToken();
     return await http.get(fullUrl, headers: _setHeaders());
   }

  }

in sign up page use this method where you use sign up button on pressed

void _signUp() async {

var data = {
  'mobile': mobileController.text,
  'password':  mobileController.text,
};

var res = await Network().signUp(data, '/register');
var body = json.decode(res.body);
if (body.statusCode == 200) {
  SharedPreferences localStorage = await SharedPreferences.getInstance();
  localStorage.setString('token', json.encode(body['data']['token']));

  localStorage.setString('data', json.encode(body['data']));

  Navigator.push(
    context,
    new MaterialPageRoute(builder: (context) => Home()),
  );
} else  {
//      errorMessage = "as you want to show ";

 
}


  }

in sign up page , use this method same as sign up pages

void signIn() async {

var data = {'mobile': mobile, 'password': password};
var res = await Network().signIn(data, '/login');
var body = json.decode(res.body);

if (res.statusCode == 200) {
  SharedPreferences localStorage = await SharedPreferences.getInstance();
  localStorage.setString('token', json.encode(body['data']['token']));
  localStorage.setString('data', json.encode(body['data']));
  Navigator.pushReplacement(
    context,
    new MaterialPageRoute(builder: (context) => HomePage()),
  );
} else if (res.statusCode != 200) {
 // mobileError = "These credentials do not match our records.";
}
   }

now you can have the token when u signup/singIn and store token in sharedSharedPreferences whenever you try to acces token just called _getToken() method

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2014-09-24
    • 2014-10-12
    • 2023-03-09
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    相关资源
    最近更新 更多