You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 16:24:51