我正在尝试根据输入值将某些值分配给某些属性。该值在小部件的整个生命周期中保持不变。因此我使用了Stateless小部件。但是,我无法从构造函数中为 props 分配值。
class InOrOut extends StatelessWidget {
final Condition condition;
final bool isIconVisible;
final Color backgroudColor;
final Color foregrounndColor;
InOrOut({Key key, this.condition, this.isIconVisible}) : super(key: key) {
switch (condition) {
case Condition.IN:
backgroudColor = Colors.green[100];
foregrounndColor = Colors.green[100];
isIconVisible = false
break;
case Condition.ABSENT:
backgroudColor = Colors.grey[300];
foregrounndColor = Colors.green[100];
isIconVisible = true;
break;
case Condition.OUT:
backgroudColor = Colors.red[100];
foregrounndColor = Colors.green[100];
isIconVisible = false;
break;
default:
backgroudColor = Colors.red[100];
foregrounndColor = Colors.green[100];
isIconVisible = false;
}
}
Run Code Online (Sandbox Code Playgroud)
尝试为 prop 赋值时出现以下错误:
'foregroundColor' 不能用作 setter,因为它是最终的。尝试寻找不同的设置器,或将 'foregroundColor' 设置为非 Final.dart(assignment_to_final)
如果删除,final我将无法在Stateless小部件内使用它。
Stateful最后,我是不是应该因为这个而换成widget呢?
要保持小部件无状态,您需要将属性声明为late final并在构造函数中初始化它们。例子:
class IntroPage extends StatelessWidget {
IntroPage(
this.step, {
Key? key,
}) : super(key: key) {
iconData = _getIconData(step);
title = 'This is title ${step.toString()}';
body = _getBody(step);
}
final IntroStep step;
late final IconData iconData;
late final String title;
late final String body;
IconData _getIconData(IntroStep step) {
IconData iconData;
switch (step) {
case IntroStep.step1:
iconData = Icons.share_sharp;
break;
case IntroStep.step2:
iconData = Icons.sailing;
break;
case IntroStep.step3:
iconData = Icons.grid_view_outlined;
break;
}
return iconData;
}
@override
Widget build(BuildContext context) {
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4468 次 |
| 最近记录: |