自定义文本字段小部件的默认文本编辑控制器

default texteditingcontroller for custom text field widget

我想要一个默认的空控制器用于我的自定义文本字段,但它不允许这两种方式

您不能在拥有 const 构造函数的同时使用非常量默认值。 因此,您必须删除 CustomTextField 之前的 const 关键字。但是您也不能将 non-constant 值作为可选参数。

所以建议将无状态小部件更改为有状态小部件,如果构造函数没有提供控制器,则在 init() 方法中初始化控制器。

最好像这样设置一个默认控制器,这样我们就可以处理它以防止内存泄漏:

import 'package:flutter/material.dart';

class CustomTextField extends StatefulWidget {
  const CustomTextField({
    Key? key,
    this.controller,
  }) : super(key: key);

  final TextEditingController? controller;

  @override
  State<CustomTextField> createState() => _CustomTextFieldState();
}

class _CustomTextFieldState extends State<CustomTextField> {
  late TextEditingController _controller;

  @override
  void initState() {
    super.initState();
    _controller = widget.controller ?? TextEditingController();
  }

  @override
  void dispose() {
    if (widget.controller == null) {
      // if we made the controller ourselves, we dispose it ourselves
      // but if it's made outside of this widget, it should be disposed outside
      _controller.dispose();
    }
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}