【问题标题】:Flutter sms_autofill doesn't always read the OTP automaticallyFlutter sms_autofill 并不总是自动读取 OTP
【发布时间】: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,代码附在说明中。你还需要什么吗?
  • 我的错!我最后只是犯了一些错误
  • 能否请您告诉我们您的错误,因为我也遇到了这个问题

标签: flutter dart autofill


【解决方案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);
         }
      },
    ),
    

    【讨论】:

      猜你喜欢
      • 2021-02-25
      • 2021-11-08
      • 2021-06-21
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多