Flutter sms_autofill并不总是自动读取OTP

问题描述

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。 我的Flutter应用程序能够自动但并非总是读取OTP,就像当我进行一些更改并进行热重新加载时,或者甚至在再次运行Flutter运行之后,有时它不读取代码是不是我缺少什么? 我正在使用sms_autofill 1.2.3自动填充OTP。 我的Flutter应用程序能够自动但并非总是读取OTP,就像当我进行一些更改并进行热重装或者甚至在再次运行Flutter运行之后,有时它不读取代码是不是我缺少什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...