es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Flutter: El getter ‘build’ no está definido en una superclase de ‘CustomButton’.

Estoy intentando crear un widget de botón personalizado en Flutter. Debería basarse en el widget ElevatedButton. De alguna manera, obtengo este mensaje de error:

El getter ‘build’ no está definido en una superclase de ‘CustomButton’.
Intenta corregir el nombre al nombre de un getter existente, o define un getter o un campo llamado ‘build’ en una superclase.

Pero la superclase definitivamente tiene el método build. Aquí está el código:

class CustomButton extends ElevatedButton {
  @override
  final VoidCallback onPressed;
  final Widget child;

  @override
  const CustomButton({required this.onPressed, required this.child})
      : super(onPressed: onPressed, child: child);

  Widget build(BuildContext context) {
    return Theme(
      data: Theme.of(context).copyWith(
          buttonTheme: Theme.of(context).buttonTheme.copyWith(
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(15.0)))),
      child: Builder(builder: super.build),
    );
  }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el método “build” no está marcado con la anotación “@override”, lo cual está provocando que se muestre el mensaje de error. Para corregir el error, el método “build” debe ser marcado como “@override”. El código corregido para la clase CustomButton se muestra a continuación:

    class CustomButton extends ElevatedButton {
      final VoidCallback onPressed;
      final Widget child;
    
      const CustomButton({required this.onPressed, required this.child})
          : super(onPressed: onPressed, child: child);
    
      @override
      Widget build(BuildContext context) {
        return Theme(
          data: Theme.of(context).copyWith(
              buttonTheme: Theme.of(context).buttonTheme.copyWith(
                  shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(15.0)))),
          child: Builder(builder: super.build),
        );
      }
    }
    

    Al agregar la anotación “@override” al método “build”, Flutter ahora sabe que el método está siendo sobreescrito desde la superclase, y el mensaje de error debería desaparecer.

Comments are closed.