発生した問題
FlutterのNavigatorにパラメーを渡して、遷移しようとしたところエラーが発生した。
作成したコードのイメージ
list_prev.dart
// listに遷移するためのコード
Navigator.of(context).pushNamed(
"/list",
arguments: <String, Map>{
// 渡したいパラメータ {"id": 1, "name": "test"}
'data': data,
},
);
list.dart
final args = ModalRoute.of(context).settings.arguments;
final String name = args['name'];
エラーメッセージ
The operator '[]' isn't defined for the class 'Object'. Dart
環境
- macOS Catalina 10.15.4
- Xcode 11.4
- Flutter 1.15.17
結論
argsをMapにキャストすることで解決した。
final args = ModalRoute.of(context).settings.arguments as Map;
final String name = args['name'];
検証したことと原因
最初は args
の型に問題があるのではないかと仮説を立てて、型と値の出力をしたが型と値は想定していたものとなっていた。
更に調べてみると、 ModalRoute.settings.arguments
はそもそもobjectを返す想定になっていたことが原因だった。JSの感覚で []
で値が取得できるだろうと思っていたらそもそもできなかったようだ…。
ModalRoute.settings.arguments
https://api.flutter.dev/flutter/widgets/RouteSettings/arguments.html
参考記事
The operator '[]' isn't defined for the class 'Object'. Dart
https://stackoverflow.com/questions/60245865/the-operator-isnt-defined-for-the-class-object-dart