2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FlutterのNavigatorで詰まった話 | The operator '[]' isn't defined for the class 'Object'.

Posted at

発生した問題

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

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?