Flutter 颤振:在特定HTTP错误上注销用户

Flutter 颤振:在特定HTTP错误上注销用户,flutter,Flutter,我有一个用于web服务的移动前端应用程序,需要用户登录 登录令牌可以在返回特定http错误代码的任何时刻过期或失效 我不知道我该如何处理这件事 我可以在所有的web调用中添加一个try-catch,但听起来好像有很多冗余的键入和复制粘贴 我正在考虑为API服务类注册一个侦听器,但是如何在路由管理的回调中获得fliftcontext 我查过了。我的问题不是如何检查错误或注销用户,而是如何集中/转换现有应用程序 看起来像我的情况,但几个月后唯一的答案是不被接受的。让我怀疑这是不是应该这样做 任何值得

我有一个用于web服务的移动前端应用程序,需要用户登录

登录令牌可以在返回特定http错误代码的任何时刻过期或失效

我不知道我该如何处理这件事

我可以在所有的web调用中添加一个try-catch,但听起来好像有很多冗余的键入和复制粘贴

我正在考虑为API服务类注册一个侦听器,但是如何在路由管理的回调中获得flift
context

我查过了。我的问题不是如何检查错误或注销用户,而是如何集中/转换现有应用程序

看起来像我的情况,但几个月后唯一的答案是不被接受的。让我怀疑这是不是应该这样做


任何值得赞赏的想法

假设有一个控制所有路由的GeneratorOute

runApp(new Material (
        child: MaterialApp(
          title: 'Title',
          debugShowCheckedModeBanner: false,
          theme: App.theme,
          home: Splash(),
          onGenerateRoute: router.generateRoute,
        )
      )
  )
现在在路由器课上

Route<dynamic> generateRoute(RouteSettings settings) {

// Add a logic here. Save the GlobalStatus.authStatus whenever a http call is made.
if(GlobalStatus.authStatus==401)
  return MaterialPageRoute(builder: (context) => Login());

  switch (settings.name) {
...
...
路由生成器输出(路由设置){
//在此处添加逻辑。每当进行http调用时,保存GlobalStatus.authStatus。
if(GlobalStatus.authStatus==401)
返回MaterialPage路由(生成器:(上下文)=>Login());
开关(设置.名称){
...
...

首先,您应该通过相同的方法传递请求响应。 当您收到错误代码时,您可以调用ChangeNotifier在应用程序中重建消费者

Future<ApiResponse> makeGetRequest(url) async {
var response = await client.get(url, headers: await headers());
return _response(response);
}

dynamic _response(http.Response response) {
switch (response.statusCode) {
  case 200:
    return ApiResponse.fromJson(json.decode(response.body));
  case 401:
    locator<GlobalChangeNotifier>().logout();
  default:
    throw ErrorHandler(response);

}
Future makeGetRequest(url)异步{
var response=await client.get(url,headers:await headers());
返回(应答);;
}
动态响应(http.response){
开关(响应状态代码){
案例200:
返回ApiResponse.fromJson(json.decode(response.body));
案例401:
定位器().logout();
违约:
抛出错误处理程序(响应);
}

因此,您可以捕获GET请求的所有标题,您可以对http.client使用相同的方法,并使所有请求通过您的客户端,您必须通过您的方法传递请求类型。

它是否仅在发生导航事件时进行检查?我希望它在错误发生后立即注销,而不是在用户离开当前页面时。f或者你必须使用一些可观察的东西。你提到的mobx是正确的方法,但反过来可能需要代码更改关于路线/导航堆栈的内容是什么?