🦅

FlutterのNavigatorで詰まった話 | The operator '[]' isn't defined fo

2020/10/14に公開

発生した問題

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

Discussion