我创建了一个移动应用程序。主页欢迎用户。主页上有一个编辑按钮和一个登录按钮。我不使用登录页面。我从 URL、用户名和密码编辑页面获取此信息,并使用主页上的 SharedPreferences 获取此信息并获取令牌。使用我得到的令牌,我按下登录按钮以获取我想要的数据。系统工作。但有时我会遇到问题。我输入用户的信息,当我按下登录按钮时,我得到了我想要的信息。但是当我更改用户信息时,旧令牌和新令牌有时会混淆。每次按登录键,这两个用户的信息都是随机显示的。我只想购买带有最后输入信息的代币并使用该代币接收数据。没有错误返回。 我想解决这个问题。我尝试了我在网站上找到的所有内容。但无法解决问题。
class MyApp extends StatefulWidget {
@override
_State createState() => _State();
}
class _State extends State<MyApp> {
String username = '';
String password = '';
String url = '';
String token = '';
Future<void> getToken() async {
//...Some Information
Map parsed = new Map();
http
.post(oauthUrl,
body: map, headers: <String, String>{'authorization': basicAuth})
.then((resp) => {
parsed = json.decode(resp.body),
setState(() {
this.token = parsed["access_token"];
_setToken(parsed["access_token"]);
})
})
.catchError((err) => {this.token = "error"});
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _getUsername().then((v) {
setState(() {
username = v;
});
});
});
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _getPassword().then((v) {
setState(() {
password = v;
});
});
});
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _getUrl().then((v) {
setState(() {
url = v;
});
});
});
WidgetsBinding.instance.addPostFrameCallback((_) async {
await this.getToken();
setState(() {});
});
}
@override
Widget build(BuildContext context) {
getToken();
return Scaffold(
appBar: AppBar(
title: Text('My App'),
centerTitle: true,
backgroundColor: Colors.grey,
),
body: Padding(
padding: EdgeInsets.all(10),
child: ListView(
children: <Widget>[
Container(
child: Image.asset(
'images/my_logo.png',
height: 300,
)),
Container(
alignment: Alignment.center,
padding: EdgeInsets.all(10),
child: Text(username ?? 'username not found.',
style: TextStyle(color: Colors.black, fontSize: 16)),
),
SizedBox(
height: 20,
width: 20,
),
Container(
height: 35,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.grey,
),
child: Text('Login'),
onPressed: () {
getToken();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => getData()),
);
})),
SizedBox(width: 20, height: 20),
Container(
height: 35,
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
child: RaisedButton(
child: Text('User Infos'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ThirdRoute()),
);
})),
],
)));
}
}
答案 0 :(得分:0)
我找到了解决方案。