Flutter如何隐藏TextFormField输入框 仅允许从Google地图获取邮编值
方案1:保留原有逻辑仅隐藏输入框(改动最小,推荐)
因为你需要保留Google地图赋值邮编、表单校验、自动保存pincode的能力,不要直接删除输入框组件,只需要把它设为不可见且不占布局空间即可,原有所有逻辑不需要修改。
修改后的代码如下:
setPincode() { // 用Offstage包裹,组件仍在Widget树中,控制器、校验、保存逻辑全部正常生效 return Offstage( offstage: true, child: TextFormField( keyboardType: TextInputType.number, controller: pincodeC, style: Theme.of(context) .textTheme .subtitle2 .copyWith(color: colors.fontColor), inputFormatters: [FilteringTextInputFormatter.digitsOnly], onSaved: (String value) { pincode = value; }, validator: (val) => validatePincode( val, getTranslated(context, 'PIN_REQUIRED'), ), decoration: InputDecoration( hintText: getTranslated(context, 'PINCODEHINT_LBL'), isDense: true, ), ), ); }
说明:Offstage组件设置offstage: true时,组件不会显示在页面上,也不会占用任何布局空间,但仍然会保留在Widget树中,你之前绑定的pincodeC控制器、表单onSaved、validator逻辑全部可以正常运行,Google地图获取到邮编后给pincodeC赋值的逻辑完全不需要调整。
方案2:彻底移除输入框组件(适合不需要表单自动校验/保存的场景)
如果你确认不需要表单自动触发校验和onSaved逻辑,也可以直接删除这个TextFormField组件,只需要保留pincodeC控制器即可:
- Google地图获取到邮编后依然直接给
pincodeC.text赋值 - 表单提交时手动读取
pincodeC.text赋值给pincode变量,手动调用validatePincode方法做校验即可。
原页面对应截图:
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

