Flutter intl_phone_number包设置初始国家码+961不生效如何解决
Flutter intl_phone_number 初始国家码设置不生效解决方案
你配置initialValue后不生效的核心原因是:该参数要求传入PhoneNumber类型的实例,直接传'+961'/'961'这类字符串不符合参数类型要求,组件无法正确识别解析。
正确配置步骤
- 构造对应区号的
PhoneNumber实例,不要直接传字符串值 - 将构造完成的实例传入组件的
initialValue属性即可
写法1:通过ISO国家码直接构造(推荐)
区号+961对应的国家是黎巴嫩,ISO 3166-1 alpha-2国家码为LB,直接构造实例传入即可:
// 提前定义初始号码实例 final PhoneNumber initPhoneNum = PhoneNumber( isoCode: IsoCode.LB, dialCode: '+961' ); // 组件配置 InternationalPhoneNumberInput( onInputChanged: onInputChanged, cursorColor: kDarkGreyColor, initialValue: initPhoneNum, // 传入PhoneNumber类型实例 hintText: 'Phone Number', // 其余自定义配置... )
写法2:通过区号字符串异步解析
如果不想硬编码ISO枚举,可以在组件初始化阶段调用包自带的解析方法,通过区号字符串自动生成对应PhoneNumber实例:
PhoneNumber? initPhoneNum; @override void initState() { super.initState(); // 传入带+的区号字符串解析 PhoneNumber.getRegionInfoFromPhoneNumber('+961').then((parsedNum) { setState(() { initPhoneNum = parsedNum; }); }); } // 组件配置时判空即可,解析完成后会自动选中对应国家 InternationalPhoneNumberInput( onInputChanged: onInputChanged, cursorColor: kDarkGreyColor, initialValue: initPhoneNum, hintText: 'Phone Number', // 其余自定义配置... )
注意事项
- 若自定义了
selectorConfig选择器配置,不要覆写默认的初始选中逻辑 - 动态切换初始国家时,需要更新传入的
PhoneNumber实例后调用setState触发组件重绘,仅修改字符串变量不会生效
问题相关截图:
内容的提问来源于stack exchange,提问作者lou_codes
相关产品推荐
相关产品推荐

