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.

El tipo de argumento ‘FutureBuilder‘ no se puede asignar al tipo de parámetro ‘Future?’.

Me enfrento a este error en mi código:

El tipo de argumento ‘FutureBuilder‘ no puede asignarse al tipo de parámetro ‘Future<object?>?’

class _HomePageState extends State<homepage> {
  late FutureBuilder<newsmodel> _newsModel;

@override
  void initState() {
    _newsModel = APIManager().getNews() as FutureBuilder<newsmodel>;
    super.initState();
  }

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Center(child: Text('News App')),
      ),
      body: Container(
        child: FutureBuilder(
          future: _newsModel,
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return ListView.builder(itemBuilder: (context, index) {
                return Container(
                  height: 100,
                  color: Colors.red,
                );
              });
            } else
              return Center(child: CircularProgressIndicator());
          },
        ),
      ),
    );
  }
}

Ayúdame a resolver este error. Gracias.</object?>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el objeto _newsModel, que es de tipo FutureBuilder<newsmodel>, no se puede asignar al parámetro de tipo Future<object?>?. En otras palabras, el parámetro future que se pasa al widget FutureBuilder espera un tipo Future, no un FutureBuilder.

    Para solucionar este problema, debes cambiar el tipo de _newsModel a Future<newsmodel> y asignarle el resultado de la llamada al método API_Manager().getNews(), que ya devuelve un tipo Future<newsmodel>. Aquí está el código actualizado:

    class _HomePageState extends State<homepage> {
      late Future<newsmodel> _newsModel;
    
      @override
      void initState() {
        _newsModel = API_Manager().getNews();
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Center(child: Text('News App')),
          ),
          body: Container(
            child: FutureBuilder(
              future: _newsModel,
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  return ListView.builder(itemBuilder: (context, index) {
                    return Container(
                      height: 100,
                      color: Colors.red,
                    );
                  });
                } else
                  return Center(child: CircularProgressIndicator());
              },
            ),
          ),
        );
      }
    }
    

    Con esta modificación, deberías poder deshacerte del error y mostrar los datos de noticias en tu aplicación.</object?>

Comments are closed.