如何从intl_phone_field的IntlPhoneField获取完整电话号码?
解决IntlPhoneField获取完整带国家码电话号码的问题
controller只会返回不带国家码的本地号码,要拿到完整号码,可以用以下两种方式:
方法一:通过onChanged回调实时获取
定义一个变量存储完整号码,在组件的onChanged回调中直接获取PhoneNumber对象的completeNumber属性,这是已经拼接好国家码的完整号码:
String? fullPhoneNumber; // 组件代码 IntlPhoneField( disableLengthCheck: true, controller: phoneNumberCon, decoration: InputDecoration( hintText: 'Phone Number', ), onChanged: (PhoneNumber phone) { fullPhoneNumber = phone.completeNumber; }, )
之后直接使用fullPhoneNumber就能拿到带国家码的完整号码。
方法二:通过GlobalKey主动获取
如果需要在特定时机(比如点击按钮时)主动获取,可以给组件绑定一个GlobalKey,通过key访问组件状态拿到PhoneNumber对象:
final GlobalKey<IntlPhoneFieldState> phoneFieldKey = GlobalKey(); // 组件代码 IntlPhoneField( key: phoneFieldKey, disableLengthCheck: true, controller: phoneNumberCon, decoration: InputDecoration( hintText: 'Phone Number', ), ) // 需要获取时调用 String? fullNumber = phoneFieldKey.currentState?.value?.completeNumber;
另外,PhoneNumber对象还提供了countryCode(如+86)、dialCode等属性,如果你需要自己拼接,也可以用phone.countryCode + phoneNumberCon.text,但推荐直接用completeNumber,避免手动拼接出现格式错误。
内容的提问来源于stack exchange,提问作者Harshana
相关产品推荐
相关产品推荐

