I am trying to transfer data with navigator.pushNamed but I am getting error and I don't know how to solve it.
My Code;
First screen transfer data
Navigator.pushNamed(context, '/resultscreen',
arguments: <dynamic, dynamic>{
"totalCorrectGuess": totalCorrectGuess,
"imageName": imageName,
});
`Second screen use data
class _ResultScreenState extends State<ResultScreen> {
@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'),
)
],
),
),
),
);
}
}
Line of code error
Text('totalCorrectAnswer: \n${gameScreenData!['totalCorrectGuess']}'),
Image.asset('assets/images/${gameScreenData!['imageName']}.png'),
CodePudding user response:
You have to cast the gameScreenData to Map
final gameScreenData = (ModalRoute.of(context)?.settings.arguments) as Map;
CodePudding user response:
You are passing Map, therefore you can typecast it
Map? gameScreenData = ModalRoute.of(context)?.settings.arguments as Map;
And use like
if (gameScreenData != null) ...[
Text(
'totalCorrectAnswer: \n${gameScreenData['totalCorrectGuess'] ?? "default value"}'),
if (gameScreenData['imageName'] != null)
Text('assets/images/${gameScreenData['imageName']}.png'),
],
