Flutter 3.41升级后TextField光标消失、文本自动选中问题求助
Flutter 3.41版本TextField编辑异常问题求助
升级至Flutter 3.41版本后,我遭遇了TextField的异常问题:点击文本中特定字符进行编辑时,会出现以下现象:
- 全部或部分文本被自动选中
- 光标完全不显示
- 无法手动放置光标
该问题仅在版本升级后出现。我尝试让父组件销毁TextEditingController,但并未解决问题。
请问是否有开发者遇到过此类问题?这是否为已知问题,或是与Flutter近期版本中焦点/选中处理的变更相关?
class CustomTextFormField extends StatefulWidget { final String hintText; final String? Function(String?) validator; final TextInputAction textInputAction; final bool isPassword; final TextInputType inputType; final TextEditingController controller; final bool centerText; final bool isForEditName; final void Function(String?)? onChanged; final void Function(String?)? onSubmitted; final bool autoFocus; const CustomTextFormField({ super.key, required this.hintText, required this.validator, this.autoFocus = false, this.onSubmitted, this.onChanged, this.textInputAction = TextInputAction.next, this.isPassword = false, this.inputType = TextInputType.name, required this.controller, this.centerText = false, this.isForEditName = false, }); @override State<CustomTextFormField> createState() => _CustomTextFormFieldState(); } class _CustomTextFormFieldState extends State<CustomTextFormField> { late bool isPasswordShown; @override void initState() { super.initState(); isPasswordShown = widget.isPassword; } @override void dispose() { widget.controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), boxShadow: [ AppTheme.primaryShadow, ] ), child: TextFormField( maxLines: 1, autofocus: widget.autoFocus, onFieldSubmitted: widget.onSubmitted, onChanged: widget.onChanged, style: widget.isForEditName ? AppTextStyles.almaraiBold(fontSize: 16, color: Colors.white) : AppTextStyles.almaraiRegular( fontSize: 16, color: AppColors.greyTextColor), validator: widget.validator, textAlign: widget.centerText ? TextAlign.center : TextAlign.start, textInputAction: widget.isForEditName ? TextInputAction.go : widget.textInputAction, obscuringCharacter: '▪', obscureText: isPasswordShown, keyboardType: widget.isForEditName ? TextInputType.name : widget.inputType, controller: widget.controller, decoration: InputDecoration( hintText: widget.hintText, alignLabelWithHint: true, suffixIcon: widget.isPassword ? IconButton( padding: EdgeInsets.zero, constraints: BoxConstraints( maxWidth: 20, maxHeight: 20, ), onPressed: () { setState(() { isPasswordShown = !isPasswordShown; }); }, icon: Icon( isPasswordShown ? Icons.visibility_outlined : Icons.visibility_off_outlined, color: Colors.grey, size: 16, // control icon size if needed ), ) : null, suffixIconConstraints: BoxConstraints(maxHeight: 35, maxWidth: 35), constraints: BoxConstraints( maxWidth: context.screenWidth * 0.34, ), contentPadding: EdgeInsets.symmetric(horizontal: 10, vertical: 8), hintFadeDuration: Duration(milliseconds: 300), fillColor: widget.isForEditName ? Color(0xff0DA2FF) : AppColors.formFieldFillColor, filled: true, hintStyle: AppTextStyles.almaraiBold( fontSize: 16, color: AppColors.greyTextColor, ), prefixIcon: widget.isForEditName ? ImageFromAsset( imagePath: AppAssets.editPenImage, width: 25, height: 25, ) : null, prefixIconConstraints: BoxConstraints( maxHeight: 40.w, maxWidth: 40.w, ), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: AppColors.formFieldStrokeColor, width: 3, )), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: AppColors.formFieldStrokeColor, width: 3, )), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: Colors.blue, width: 2, ), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: Colors.red, width: 2, ), ), isDense: true, )), ); } }

内容的提问来源于stack exchange,提问作者A-E
相关产品推荐
相关产品推荐

