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.

¿Cómo pasar la función Navigator como parámetro en Dart?

Tengo un widget personalizado que representa un botón y este widget está en una carpeta separada llamada “Widgets” dentro de la carpeta “lib”, y ese es el archivo del widget de botón.

import 'package:flutter/material.dart';

Widget buttonWidget(String text, Function action) {
  return ElevatedButton(
    onPressed: () => action,
    child: Text(text, style: const TextStyle(fontSize: 20),
  );
}

Ahora en el archivo main.dart, quiero que el buttonWidget use la función Navigator.pushNamed, así que llamé al buttonWidget de esta manera:

buttonWidget("Navegar", () => Navigator.pushNamed(context, '/screenTwo')),

Pero la llamada al buttonWidget me da este error:

dart
El tipo de argumento 'Future<object?>' no se puede asignar al tipo de parámetro 'Function'.
</object?>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error indica que el segundo argumento pasado a la función buttonWidget tiene un tipo incorrecto. Se espera una Function, pero se está recibiendo un Future<object?>.

    Esto se debe a que la función Navigator.pushNamed() devuelve un objeto Future. Por lo tanto, debes envolver la llamada a Navigator.pushNamed() en una función anónima, de esta manera:

    buttonWidget("Navegar", () => Navigator.pushNamed(context, '/screenTwo')),
    

    Esto garantizará que el callback onPressed del ElevatedButton reciba una función en lugar de un futuro, y el error debería resolverse.</object?>

Comments are closed.