Twilio+Supabase+Flutter发送OTP时出现SmsStatus.status反序列化错误
问题原因
这个报错是Supabase客户端SDK与服务端实例版本不兼容导致的序列化异常:服务端返回的短信状态字段status为数字类型,但你当前使用的SDK版本内置的结构体定义该字段为字符串类型,JSON反序列化时类型不匹配触发报错。另外你使用的signIn接口在新版Supabase SDK中已被废弃,接口参数结构变动也会触发该异常。
解决方案
- 第一步:升级Supabase Flutter SDK到最新稳定版
修改pubspec.yaml中的依赖声明为最新版本,示例如下:
执行命令更新依赖:dependencies: supabase_flutter: ^2.3.4flutter pub upgrade supabase_flutter - 第二步:替换已废弃的发送OTP接口
新版SDK使用signInWithOtp方法发送手机号验证码,正确代码示例如下:Future<void> signInUser(String phonenum) async { final response = await supabaseClient.auth.signInWithOtp( phone: phonenum, options: AuthOptions(redirectTo: 'https://vmlkpbfoohvcmnzgkkpr.supabase.co'), ); if (response.error != null) { // 错误处理 print('Error: ${response.error?.message}'); } else { // OTP发送成功,等待用户输入验证码后校验 print('OTP 发送成功'); } } - 第三步:校验手机号格式
传入的手机号必须符合E.164标准,需要携带国家码前缀,比如中国手机号格式为+8613xxxxxxxxx,格式错误也会触发底层序列化异常。 - 降级备选方案
如果升级后仍然存在兼容问题,可将SDK降级到1.x稳定版,示例版本声明:supabase_flutter: ^1.10.24
内容的提问来源于stack exchange,提问作者Usama Yousaf
相关产品推荐
相关产品推荐

