关于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类的实例,并且它的
isLoadinggetter返回值为true,就返回LoadingItemTile组件; - 其他情况(比如isLoading为false的Item实例),就把对象赋值给
item变量,返回传入该对象的ItemTile组件。
为什么Item(isLoading: true)不是构造函数?
咱平时写Item(isLoading: true)如果是在创建新对象,那才是构造函数调用,但这里是在switch的分支条件里,属于模式匹配的校验规则:
- 这里的
Item(...)是类模式,用来先匹配“当前对象是不是Item类的实例”; - 括号里的
isLoading: true是getter模式,用来进一步校验这个Item实例的isLoadinggetter返回值是否等于true。
顺带解答“能不能把getter传给构造函数”的疑问
其实如果场景需要,是可以把getter的返回值传给构造函数的——比如构造函数需要一个bool参数,你可以写SomeClass(isLoading: myItem.isLoading),本质是调用getter拿到值后再传入。但这段代码里完全不是这个场景哦~
内容来源于stack exchange
相关产品推荐
相关产品推荐

