我想定义一个可以 Select 接受参数的getter.我成功地做到了这一点,但只有在通话后加上必须的()才行.以下是代码:

get children => ([role=null]) {
  if(role == null || role == 'any') { return _children;               }
  else                              { return _children_by_role[role]; }
};

所以现在我可以说

obj.children('something').length;

obj.children().length;

但我不能说

obj.children; // this doesn't w或k

because it results in the following err或:

Caught Closure call with mismatched arguments: function 'length' NoSuchMethodErr或 : method not found: 'length' Receiver: Closure: ([dynamic])

推荐答案

在DART中,getter意味着与访问对象属性没有区别,因此定义接受参数的getter是非法的(即使它是可选的).

getter不接受任何参数,但使用=>运算符,returns是一个接受可选参数的匿名函数.obj.children是一个函数;因此,语句obj.children.length;是一个错误,因为函数没有属性length.

您可能无法省略括号,但是如果get children不是getter函数,您的代码会工作得更自然:

getChildren([roll]) { // null is the default value implicitly
  if (roll == null || roll == 'any') return _children;
  else return _children_by_roll[roll];
}

用作:

obj.getChildren().length;

或者:

obj.getChildren(rollObject).length;

Dart相关问答推荐

`异步内联方法`的这些定义之间有什么区别?

AppLifcycleState.didChangeLifecycleState( ) 函数在应用程序进入前台或后台时不被调用

Flutter 中的with关键字

如何计算列表中元素的出现次数

如何在Flatter中将图表线 colored颜色 更改为自定义 colored颜色 代码值

如何根据用户在Flitter中的时间显示问候,如早上好、下午好或晚上好

Flutter 从asset文件夹中读取所有文件

如何在控件边框(border()/阴影(shadow)中添加霓虹灯效果?

停止音频循环(audioplayers 包)

有没有更好的方法来解析 Dart 中的 int

如何使用flatter删除Firestore文档中的字段

Dart:默认 gitignore?

Flutter - 在 POST 请求中处理状态码 302

如何判断设备是否需要 SafeArea?

Flutter:如何获取assets目录中所有图像的名称列表?

谷歌的 Dart 编程语言的作用是什么?

Dart 中 await for 和 listen 的区别

Dart 如何匹配然后替换正则表达式

你如何在 Dart 中对异常进行单元测试?

在 Dart 中是否有一种将 int 转换为 double 的快速方法?