Flutter sms_autofill 并不总是自动读取 OTP
Posted
技术标签:
【中文标题】Flutter sms_autofill 并不总是自动读取 OTP【英文标题】:Flutter sms_autofill doesn't always read the OTP automatically 【发布时间】:2020-08-21 06:46:37 【问题描述】:import 'package:flutter/material.dart';
import 'package:sms_autofill/sms_autofill.dart';
import './../../widgets/color_loader.dart';
import './../../models/login_api_response_model.dart';
import './../../services/Authentication/authentication_service.dart';
import './../../models/enum_models.dart';
import './login_error_page.dart';
class ValidateOtp extends StatefulWidget
final String mobileNumber;
ValidateOtp(@required this.mobileNumber);
@override
_ValidateOtpState createState() => _ValidateOtpState();
class _ValidateOtpState extends State<ValidateOtp>
final SmsAutoFill _autoFill = SmsAutoFill();
bool verifactionFailed = false;
Future<LoginApiResponseModel> response;
LoginApiResponseModel loginApiResponseModel;
bool isInit = true;
bool resendOtp = false;
String otp;
void fetchOtp()
print('setState fetchOtp');
response = AuthenticationService.generateOtp(widget.mobileNumber)
.then((value) => loginApiResponseModel = value);
@override
void initState()
_listenOTP();
fetchOtp();
super.initState();
void _listenOTP() async
await SmsAutoFill().listenForCode;
validateOtp(String otp)
print('Code received $otp');
@override
void dispose()
SmsAutoFill().unregisterListener();
super.dispose();
@override
Widget build(BuildContext context)
print('$_autoFill.getAppSignature');
return Scaffold(
body: FutureBuilder(
future: response,
builder: (context, dataSnapShopt)
if (dataSnapShopt.connectionState == ConnectionState.waiting)
return Center(
child: ColorLoader(),
);
else if (dataSnapShopt.error != null)
return Center(
child: Text('Something went wrong..'),
);
else
return loginApiResponseModel.status == 'fail'
? LoginErrorPage(
errorMessage: 'Invalid Mobile number!',
errorType: ErrorType.InvalidMobileNumber,
)
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: PinFieldAutoFill(
autofocus: true,
keyboardType: TextInputType.number,
codeLength: 6,
onCodeChanged: (value)
if (value.length == 6)
print(' onCodeChanged');
otp = value;
,
),
),
),
Container(
child: FloatingActionButton.extended(
onPressed: () => validateOtp(otp),
label: Text('Confirm'),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Didn\'t receive OTP? '),
FlatButton(
onPressed: ()
setState(()
resendOtp = !resendOtp;
);
fetchOtp();
,
child: Text('RESEND'),
)
],
)
],
);
,
),
);
嗨,
我正在使用 sms_autofill 1.2.3
自动填充 OTP。
我的颤振应用程序能够自动读取 OTP,但并非总是如此,比如当我进行一些更改并进行热重载时,甚至在再次运行颤振运行后有时它不会读取代码我是否遗漏了什么?
我正在使用 sms_autofill 1.2.3 自动填充 OTP。
我的颤振应用程序能够自动读取 OTP,但并非总是如此,比如当我进行一些更改并进行热重载时,甚至在再次运行颤振运行后有时它不会读取代码我是否遗漏了什么?
【问题讨论】:
我能得到你如何使用 http 实现 sms_autofill 的代码吗? @Niroop,代码附在说明中。你还需要什么吗? 我的错!我最后只是犯了一些错误 能否请您告诉我们您的错误,因为我也遇到了这个问题 【参考方案1】:如果您在 android 上进行测试,请确保您已在消息末尾添加哈希或签名代码以识别您的应用,如 plugin's doc 中所述。 hash 应与您应用的密钥库签名相对应。
【讨论】:
【参考方案2】:尝试用这个更新你的代码块
PinFieldAutoFill(
keyboardType: TextInputType.number,
cursor: Cursor(color: peach, enabled: true, width: 1),
autoFocus: true,
controller: _pinController,
codeLength: 6,
currentCode: "",
decoration: BoxLooseDecoration(
textStyle: TextStyle(color: Colors.black),
radius: Radius.circular(1),
strokeColorBuilder: FixedColorBuilder(Colors.black)),
onCodeChanged: (pin)
if (pin.length == 6)
signInWithPhoneNumber(pin);
,
),
【讨论】:
以上是关于Flutter sms_autofill 并不总是自动读取 OTP的主要内容,如果未能解决你的问题,请参考以下文章