首页 > 解决方案 > 如何正确收听短信代码颤动

问题描述

我将PinPut包用于我的颤振应用程序,以便用户在从自定义后端发送手机代码后验证他们的手机代码。一切都很完美,但我想要一个自动填充机制,这样他们就不必每次都手动放置它。所以,我尝试切换到Sms Autofill包,但我不喜欢它的输入字段的外观,因为我想要更多的自定义。(无论如何,自动填充对我不起作用)。

现在,我将SMS 接收器包与我首选的 PinPut小部件一起使用。这个想法是我想收听短信代码并将其传递给我的 PinPut 控制器。但遗憾的是,监听器不起作用,因为我的代码实现没有收到消息。

这是我的代码:

 String _smsCode = "";
  bool isListening = false;

  getCode(String sms) {
    print("Snskndksdnn");
    if (sms != null) {
      final intRegex = RegExp(r'\d+', multiLine: true);
      final code = intRegex.allMatches(sms).first.group(0);

      return code;
    }
    return "NO SMS";
  }

  Future<void> onSubmitPhone() async {
    ///close keyboard
    FocusScope.of(context).requestFocus(FocusNode());
    errorPhone = _cv.contentValidator(
        phone.text.toString().trim(), '[0-9]{10,11}', errorPhone);
   
      if(errorPhone == null){
        var _api = SmsRetrieverApi();
        setState(() {});
        await _api.startListening(onReceived: (smsCode){
          _smsCode = getCode(smsCode);
          isListening = false;
        
        });
      
        Map<String, String> data = new Map();
        data = {
          "phoneNumber": phoneUpdate
        };
        try{
          Map<String, dynamic> _res = await authenticationService.sendOTP(data);
          if(_res['success'] ==true){
            AlertManager.showToast(_res['data']['smsStatus']);
            setState(() {
              isSendIngOTP = false;
              pinId = '${_res['data']['pinId']}';
            });
            _pageController.nextPage(
              duration: Duration(milliseconds: 500),
              curve: Curves.ease,
            );
         
        }

      }
    } 
  }

有什么想法可以得到我想要的结果吗?

标签: flutterdart

解决方案


推荐阅读