fluttercandies/flutter_ali_auth

demo bug 弹窗层级太高 导致提示无法正常显示

ZhangZhiH opened this issue · 14 comments

SmartDialog.showToast 全都无法正   常显示

case AuthResultCode.interfaceDemoted:
case AuthResultCode.interfaceLimited:
case AuthResultCode.featureInvalid:
case AuthResultCode.outOfService:
SmartDialog.showToast('暂时无法一键登录,请使用其他登录方式');
break;
case AuthResultCode.failed:
case AuthResultCode.errorNetwork:
case AuthResultCode.errorClientTimestamp:
case AuthResultCode.statusBusy:
SmartDialog.showToast('请求遇到问题,请稍后重试');
break;
case AuthResultCode.decodeAppInfoFailed:
SmartDialog.showToast(responseModel.msg ?? 'SDK密钥错误');
break;
case AuthResultCode.onCustomViewTap:
SmartDialog.showToast("点击自定义控件:${responseModel.msg}");
break;

第二个问题 登录成成功后 第一次正常
退出重新登录当前页面会出现
Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still active
我也不是很确定是否是我使用的问题,但是我用ali_auth: 1.0.8 没有出现过这个问题 今天刚换到您的插件flutter_ali_auth 但是初

接上面
第二次登录后在全局异常拦截里 会出现
This widget has been unmounted, so the State no longer has a context (and should be considered defunct).
这个问题我会持续跟踪

SmartDialog是flutter写,在原生页面调用时候没有办法控制层级,谢谢。说清楚你的需求,你需要显示什么在上面

第二个问题 登录成成功后 第一次正常 退出重新登录当前页面会出现 Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still active 我也不是很确定是否是我使用的问题,但是我用ali_auth: 1.0.8 没有出现过这个问题 今天刚换到您的插件flutter_ali_auth 但是初

这个插件没有除了demo没有用到widget,请检查你的代码

感谢您的回复! 首先经过这两天我对这个组件的研究 发现无论是易用性 灵活性 还是设计上确实要比ali_auth 优秀不少,其次就是作者的活跃度要高很多,所以我果断换了这个插件,目前 我遇到的问题有以下几个
需求是 获取token的时候会出现获取失败 但是无法弹窗提醒用户,导致页面无反应,实际是弹窗被授权的弹窗覆盖了, 此处如果无法降低弹窗的层级 ,是否可以增加一个关闭授权窗口的方法.报错后我可以关闭授权窗口并提示错误,

安卓升级遇到问题
1 我本地是 gradle-6.7 必须升级成 gradle-7.4
2 安卓下的 alertWindowHeight设置后影响了弹出层的宽度 ,IOS下正常 目前我的解决方案是安卓下设置alertWindowHeight=null 此处可能有疑问 因为我ios 用的是小手机 iPhone5s 安卓是小米10 可能是分辨率有影响
3. 安卓下alertTitleBarConfig 、alertContentViewColor 颜色无法生效 ,导致夜间模式无法适配 sloganConfig 无法生效传入的提示无法正常显示 注意:以上参数ios下均正常显示 代码和安卓效果图贴在最后

AliAuthClient.initSdk(
      authConfig: AuthConfig(
        androidSdk:
            "",
        iosSdk:
            "",
        //enableLog: false,
        authUIStyle: AuthUIStyle.alert,
        authUIConfig: AlertUIConfig(
         
          alertTitleBarConfig: AlertTitleBarConfig(
            alertTitleBarColor: context.isDark ? "#272D39" : "#ffffff",
          ),
          alertContentViewColor: context.isDark ? "#272D39" : "#ffffff",
          phoneNumberConfig: PhoneNumberConfig(
              numberColor: context.isDark ? "#ffffff" : "#222222"),
          privacyConfig: const PrivacyConfig(
              privacyOneName: "《用户协议》",
              privacyOneUrl: "${Constant.baseUrl}/wx/#/App/invitationAgreement",
              privacyTwoName: "《隐私政策》",
              privacyTwoUrl:
                  "${Constant.baseUrl}/wx/#/App/invitationPrivacyPolicy"),
          alertWindowHeight: Device.isIOS ? 420 : null,
          // navConfig: NavConfig(navColor: Colors.cyan.toHex()),
          loginButtonConfig: LoginButtonConfig(
              loginBtnUnableImage: "assets/images/login/login_btn_press.png",
              loginBtnNormalImage: "assets/images/login/login_btn_press.png",
              loginBtnPressedImage: "assets/images/login/login_btn_press.png"),
          logoConfig: const LogoConfig(
            logoIsHidden: false,
            logoImage: "assets/images/logo.png",
          ),
          sloganConfig: SloganConfig(
              sloganTextColor: context.isDark ? "#ffffff" : "#222222",
              sloganText: '使用本机号码一键登录',
              sloganTextSize: 16),
        ),
      ),
    );

Snipaste_2023-01-09_11-25-41
Snipaste_2023-01-09_11-26-15

第二个问题 登录成成功后 第一次正常 退出重新登录当前页面会出现 Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still active 我也不是很确定是否是我使用的问题,但是我用ali_auth: 1.0.8 没有出现过这个问题 今天刚换到您的插件flutter_ali_auth 但是初

这个插件没有除了demo没有用到widget,请检查你的代码

这个问题我查了一下,目前是怀疑在AliAuthClient.onListen的事件回调里登录成功后调用了
NavigatorUtils.push(context, Routes.home)进行页面的跳转到首页 这里用到了上下文的context flutter的跳转必须依赖context
下一次在进事件的时候 就找不到context了 因为上一个context已经被释放了
现在发现无法重新注册AliAuthClient.onListen, 此处是否应该 增加一个 AliAuthClient.removeListener()的方法,这样我下次进来重新注册事件还会找到context ,
或者引用#2问题,是否可以在AliAuthClient.login() 之后增加成功的回调

image

关不了吗?实在不行,获取token失败我在插件那里直接退出授权页面。

安卓alertWindow也就是弹窗模式,无论是底部弹窗或者提示框的宽高都是设置不了,因为阿里云提供的sdk就是这样。他们安卓的好像写得比较死。安卓的提示框bar颜色和背景颜色也是设置不了,暂时按照默认的吧

image

关不了吗?实在不行,获取token失败我在插件那里直接退出授权页面。
安卓alertWindow也就是弹窗模式,无论是底部弹窗或者提示框的宽高都是设置不了,因为阿里云提供的sdk就是这样。他们安卓的好像写得比较死。安卓的提示框bar颜色和背景颜色也是设置不了,暂时按照默认的吧

1 点击关闭按钮是可以关闭的,但是点击一键登录时候如果出错提示异常信息就被遮住了,如果异常也能像成功一样自动关闭授权窗口也可以,这样可能就不会挡住异常提示了。
2 颜色改不了就尴尬了 ,如果是真的无法实现也只好这样了。我从ali_auth插件换过来就是因为他的插件安卓一切正常,他的安卓是传的背景图片用来实现换背景色, 但是他的ios 的bug有些多,也是无法实现夜间模式
3 我看了SloganConfig 这个配置为什么安卓下不生效 用来提示标语的 一直是 ”欢迎登陆“,这个应该比较重要
image

4 还有我一直跟踪的问题:Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still active 关于回调导致flutter 上下文context找不到的问题 暂时我注释了事件无法重复注册的代码发现不会报错了,但是这样不确定是否会造成事件重复监听或引起其他问题,最好还是增加手动移除监听的方法
Snipaste_2023-01-09_13-44-16

image

明明就可以,差点被你骗了

更新,添加了移除监听。还没发pub。另外你说的点击一键登录时候如果出错提示异常信息就被遮住了,你把具体出错的截图给我看才知道怎么处理,有很多种异常回调码没法直接判断

异常信息在遮罩层下面,如果手机小的话会被白色的授权窗完全盖住 例如下面如果是从下方弹出是完全看不见异常提示的,目前我只发现这一种 频繁获取token导致错误提示,这种错误码太多
能否抛出一个手动关闭窗的方法,或者在监听onListen里回传一个关闭弹窗的回调方法,让前端人自己控制调用关闭授权窗
image

Snipaste_2023-01-10_10-01-50
Snipaste_2023-01-10_10-02-20

已更新,quitLoginPage试试

image

明明就可以,差点被你骗了
这是我用了您的demo 我什么都没改 跑起来之后
点击弹窗登录 不显示任何提示
点击底部弹窗显示"哈哈哈哈哈"
点击全屏登录 显示"欢迎登录FlutterCandies" 但是我重新修改别的属性穿进去后发现以后没有变化
说明我的初始化没有生效,下面是您的源代码

image
20e3e133741941cde412353a18d695d
52632e72b61b9003f1a815066479d39
b9b9a0c6f460f1b08342cb5b5804e44

已更新,quitLoginPage试试
这个弹窗提示影响是双端的,并不是只有安卓被遮挡提示,,ios 也是被遮挡 ios如果需要提示错误是同样需要调用的 成功目前会关闭,只要失败报错都不会关闭 所以才需要失败的时候调用quitLoginPage并提示失败原因
image