json 当会话过期或在flutter中获得响应401时如何显示对话框

5jvtdoz2  于 2022-11-19  发布在  Flutter
关注(0)|答案(2)|浏览(128)

我的应用程序有一个用户令牌,它在用户登录一段时间后过期。我得到了响应代码401,并希望导航到登录页面,我正在使用dio和flutter_secure_storage来保存令牌。

else if (e.response?.statusCode == 401) {
  //here I want to show the dialog box or navigate to the login page
  }
  print(getDioException(e));
  throw Exception(getDioException(e));
}
nqwrtyyt

nqwrtyyt1#

如果你想显示弹出窗口,请按如下所示操作。

else if (e.response?.statusCode == 401) {
    showPopUpAlert();//here you have to call your popup function
  }
  print(getDioException(e));
  throw Exception(getDioException(e));
}

//弹出UI实现

showPopUpAlert() {
    showDialog(
        context: context,
        builder: (_) => AlertDialog(
          backgroundColor: Theme.of(context).scaffoldBackgroundColor,
          shape: const RoundedRectangleBorder(
              borderRadius: BorderRadius.all(Radius.circular(10.0))),
          content: Builder(builder: (context) {
            return StatefulBuilder(builder: (context, stateMaintain) {
              return SizedBox(
                width: Responsive.isMobile(context)
                    ? Responsive.screenWidth(context) / 1.1
                    : Responsive.screenWidth(context) / 2,
                height: 350,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    AutoSizeText('Popup text',
                        style:
                        Theme.of(context).textTheme.headline1),
                  ],
                ),
              );
            });
          }),
        ));
  }
yrwegjxp

yrwegjxp2#

经过一段时间的研究,我找到了答案。我们需要创建一个全局键来导航,在我们得到401后,我们需要导航登录页面。定义全局键final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();传递MaterialApp中的值

navigatorKey: navigatorKey,

并在课堂上使用

navigatorKey.currentState?.pushNamed('/LoginScreen');

相关问题