You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Getter方法能否传入构造函数及代码中Item语法的技术疑问

关于Getter方法能否传入构造函数及代码中Item语法的技术疑问

嗨,我来帮你拆解这段Dart代码里的疑问哈~

首先得明确,你看到的Item(isLoading: true)不是构造函数调用,也不存在“把getter传给构造函数”的情况,这是Dart 3之后新增的类模式匹配语法,用来校验已有对象的属性/getter值,咱一步步说:

先理清楚这段代码的逻辑

先把核心代码贴出来方便对照:

return switch (catalog.getByIndex(index)) {
  Item(isLoading: true) => const LoadingItemTile(),
  var item => ItemTile(item: item)
};

这段代码的逻辑很清晰:

  • 拿catalog.getByIndex(index)返回的对象做匹配判断;
  • 如果这个对象是Item类的实例,并且它的isLoading getter返回值为true,就返回LoadingItemTile组件;
  • 其他情况(比如isLoading为false的Item实例),就把对象赋值给item变量,返回传入该对象的ItemTile组件。

为什么Item(isLoading: true)不是构造函数?

咱平时写Item(isLoading: true)如果是在创建新对象,那才是构造函数调用,但这里是在switch的分支条件里,属于模式匹配的校验规则:

  • 这里的Item(...)是类模式,用来先匹配“当前对象是不是Item类的实例”;
  • 括号里的isLoading: true是getter模式,用来进一步校验这个Item实例的isLoading getter返回值是否等于true。

顺带解答“能不能把getter传给构造函数”的疑问

其实如果场景需要,是可以把getter的返回值传给构造函数的——比如构造函数需要一个bool参数,你可以写SomeClass(isLoading: myItem.isLoading),本质是调用getter拿到值后再传入。但这段代码里完全不是这个场景哦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:19:27