没有为“对象”类定义运算符“ []”。镖

时间:2020-02-16 06:05:48

标签: dictionary object dart

我有一个Widget,该Widget有时会导航到其他页面。 像:-

          Navigator.of(context).pushNamed(
              NextPage.routeName,
              arguments: {
                "tag": this.tag,
                "data": this.data,
              },
            );

现在很清楚,即使argument参数接受类型Object,但它也接受Map,因为这句话并没有给我带来错误。

然后在NextPage中,我访问的值是:-

tag: ModalRoute.of(context).settings.arguments["tag"].toString(),

现在,vscode给了我错误:-

The operator '[]' isn't defined for the class 'Object'.
Try defining the operator '[]'.dart(undefined_operator)

我不知道为什么vscode给我一个错误。 因此,Object应该具有[]Map应该是一种对象。

关于日期,还有一些不清楚的地方。

注意: data是对象。

如何清除此错误?

2 个答案:

答案 0 :(得分:6)

ModalRoute.settings.arguments是类型为Object的属性。您无法在[]上调用索引器Object。 Dart中的所有内容都继承自Object,这就是为什么无论参数如何都可以将参数传递给ModalRoute的原因。但是,要使用它,您需要首先将其转换为期望使用的类型。

tag: (ModalRoute.of(context).settings.arguments as Map)["tag"].toString(),

答案 1 :(得分:0)

ModalRoute.settings.arguments 是一个类型为 Object.so 的属性,因此您可以将其设为 Map

final routeArgs = ModalRoute.of(context)!.settings.arguments as Map;

final tag = routeArgs['tag'];