login method Null safety

Future<WechatLoginResponse> login()

登录

Implementation

Future<WechatLoginResponse> login() async {
  //获取code
  final code = await _getCode();
  if (code.errorCode == WechatLoginErrorCode.getCodeSuccess) {
    // 获取accessToken
    final accessToken = await _getAccessToken(code.code!);

    if (accessToken.errorCode ==
        WechatLoginErrorCode.getAccessTokenSuccess) {
    //  获取用户信息
      final res = await Dio().get("https://api.weixin.qq.com/sns/userinfo", queryParameters: {
        "access_token": accessToken.accessToken,
        "openid": accessToken.openid
      });

      if(res.data != null){
        final Map<String, dynamic> mapData = json.decode(res.data);
        if(mapData.containsKey("errcode")){
          return WechatLoginResponse(errorCode: WechatLoginErrorCode.getUserInfoError);
        }

        return WechatLoginResponse(errorCode: WechatLoginErrorCode.success, response: WechatResponse(
            openid: mapData["openid"],
            nickname: mapData["nickname"],
            sex: mapData["sex"],
            province: mapData["province"],
            city: mapData["city"],
            country: mapData["country"],
            headimgurl: mapData["headimgurl"],
            unionid: mapData["unionid"]
        ));
      }

      return WechatLoginResponse(errorCode: WechatLoginErrorCode.getUserInfoError);
    }

    return WechatLoginResponse(errorCode: accessToken.errorCode);
  }

  return WechatLoginResponse(errorCode: code.errorCode);
}