最近看rollbar_flutter | Flutter Package源码发现有类似Class.new
写法,查了下相关用法,总结下构造函数拆分的知识点。
class User {
User();
final String name = "MisterX";
final String email = "misterx@gmail.com";
}
void main() {
//-----------
//这里User.new不是很明白
//-----------
const x = User.new;
final z = x();
print(z.email);
}
可以使用函数名称创建一个函数对象,该对象指向另外一个对象的函数。如下示例中
class Greeter {
final String name;
Greeter(this.name);
void greet(String who) {
print('$name says: Hello $who!');
}
}
void main() {
final m = Greeter('Michael');
final g = m.greet;
g('Leaf');
print('========1=========');
['Lasse', 'Bob', 'Erik'].forEach(m.greet);
}
.new is a way to pass a reference to the constructor. It doesn't create a new class. It's just the same default constructor of the class. This is also called a constructor tear-off. It was introduced in Dart 2.15.
解读:
class FruitWidget extends StatelessWidget {
const FruitWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: ['Apple', 'Orange'].map(Text.new).toList());
}
}