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 | Navigator.pushNamed Obtuve un error. El operador ‘[]’ no está definido para el tipo ‘Object’. Intenta definir el operador ‘[]’.

Estoy intentando transferir datos con navigator.pushNamed pero estoy obteniendo un error y no sé cómo solucionarlo.

Mi código:

Primera pantalla transferir datos

Navigator.pushNamed(context, ‘/resultscreen’,
arguments: <dynamic, dynamic=””>{
“totalCorrectGuess”: totalCorrectGuess,
“imageName”: imageName,
});

`Segunda pantalla utiliza datos

class _ResultScreenState extends State {
@override
Widget build(BuildContext context) {
Object? gameScreenData = ModalRoute.of(context)?.settings.arguments;

return Scaffold(
  appBar: AppBar(
    title: const Text(AppTextContants.appBarTitleResultScreen),
    centerTitle: true,
  ),
  body: Center(
    child: Container(
      margin: const EdgeInsets.all(8.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Text('totalCorrectAnswer: \n${gameScreenData!['totalCorrectGuess']}'),
          Image.asset('assets/images/${gameScreenData!['imageName']}.png'),
          ElevatedButton(
            onPressed: () {},
            child: const Text('data'),
          )
        ],
      ),
    ),
  ),
);

}
}

Líneas de código con error

Text(‘totalCorrectAnswer: \n${gameScreenData![‘totalCorrectGuess’]}’),
Image.asset(‘assets/images/${gameScreenData![‘imageName’]}.png’),</dynamic,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error que probablemente estás obteniendo es un NullPointerException debido a que existe la posibilidad de que gameScreenData sea null. Para solucionar esto, puedes agregar una declaración condicional if para verificar que los datos no sean null antes de intentar acceder a ellos.

    Reemplaza el código en el método build con el siguiente:

    @override
    Widget build(BuildContext context) {
      Object? gameScreenData = ModalRoute.of(context)?.settings.arguments;
    
      int totalCorrectGuess = gameScreenData?['totalCorrectGuess'] ?? 0;
      String imageName = gameScreenData?['imageName'] ?? '';
    
      return Scaffold(
        ...
        body: Center(
          child: Container(
            ...
            children: [
              Text('totalCorrectAnswer: \n$totalCorrectGuess'),
              Image.asset('assets/images/$imageName.png'),
              ElevatedButton(
                onPressed: () {},
                child: const Text('data'),
              )
            ],
          ),
        ),
      );
    }
    

    Con esta modificación, ahora estás verificando si gameScreenData es null antes de acceder a sus propiedades. Si es null, proporcionas un valor predeterminado de 0 para totalCorrectGuess y una cadena vacía para imageName.

    Al hacer esto, evitas cualquier posible excepción de puntero nulo y tu código debería funcionar como se espera.

Comments are closed.