gpt4 book ai didi

如果未经授权,Flutter 如何重定向到登录

转载 作者:IT王子 更新时间:2023-10-29 06:57:59 24 4
gpt4 key购买 nike

如果 token 在 Flutter 中已过期,我将尝试重定向到登录

尝试获取帖子:

body: new Container(
padding: new EdgeInsets.only(bottom: 8.0),
color: Color(0xff2c3e4e),
child: FutureBuilder<List<Post>>(
future: api.getposts(),
builder: (context, snapshot) {
// doing stuff with response
}
)
)

获取帖子并捕获错误:

Future<List<Post>> getposts() async {
url = 'url';
var response = await http.get(url,
headers: {HttpHeaders.authorizationHeader: 'bearer ' + token},
);
//part I can't understand how to get to work, how do I push? This gives error about context not being defined.
if (response.body.toString().contains('Token is Expired')) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
LoginScreen()),
);
}
}

所以问题是,在这种情况下我该如何正确使用 Navigator 并且我可以重定向回 l​​oginScreen 以防 token 已过期并需要更新?就像代码示例中的注释中提到的那样,上下文给了我“未定义”。

这甚至可能是我这样做的方式,还是我只是完全错误地处理了整个支票?

最佳答案

代码应该具有单一的责任。您的 getPost 方法同时做两件事。您应该中断此函数,使其成功获取帖子或抛出异常,并且其调用者将处理异常。它的调用者 btw 必须在 build 方法中,因为只有 build 方法有 BuildContext 上下文,像这样:

      if (response.body.toString().contains('Token is Expired')) {
throw new Exception("Token is Expired") // you may want to implement different exception class
}
      body: new Container(
padding: new EdgeInsets.only(bottom: 8.0),
color: Color(0xff2c3e4e),
child: FutureBuilder<List<Post>>(
future: api.getposts(),
builder: (context, snapshot) {
if (snapshot.hasError) {
// you might want to handle different exception, such as token expires, no network, server down, etc.
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginScreen()),
);
return Container(); // return empty widget
}
if (snapshot.hasData) {
// do somthing with data
return Text('Some data here');
}
// has no data
return Text("Loading...");

}),
),

更新

感谢@TruongSinh,我弄明白了。

按照他的示例并找出有效的构建导航器方法:

if (snapshot.hasError) {

@override
void run() {
scheduleMicrotask(() {

Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => LoginScreen()),
);
});
}
run();
}

关于如果未经授权,Flutter 如何重定向到登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55053803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com