考虑以下两个小部件:
class TestPage extends StatelessWidget {
void _sayOutLoud(String message) {
// ...
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
RaisedButton(
child: Text('Say foo'),
onPressed: () => _sayOutLoud('Foo!'),
),
RaisedButton(
child: Text('Say bar'),
onPressed: () => _sayOutLoud('Bar!'),
)
],
);
}
}
vs。
class TestPage extends StatelessWidget {
void _onFooTap() {
_sayOutLoud('Foo!');
}
void _onBarTap() {
_sayOutLoud('Bar!');
}
void _sayOutLoud(String message) {
// ...
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
RaisedButton(
child: Text('Say foo'),
onPressed: _onFooTap,
),
RaisedButton(
child: Text('Say bar'),
onPressed: _onBarTap,
)
],
);
}
}
一个使用内联lambda方法,而另一个则不使用。这意味着只要调用Function
,一个小部件就会生成一个新的build
实例,而另一个小部件始终将相同的实例传递给小部件构造函数。
想象一下,小部件经常被重建(每秒10次)。
使用lambda方法是否会对性能产生负面影响?还有其他使用lambda方法存在问题的示例吗?