我有一个可在Flutter应用程序中存储标题,正文和选项卡图标的类。
class Destination {
const Destination(
{this.title,
this.icon,
this.color = Colors.blue,
this.body: const Center(
child: Text("Example"),
)});
final String title;
final IconData icon;
final MaterialColor color;
final Widget body;
}
并且我正在尝试使用创建所有标签页的列表
const List<Destination> allDestinations = <Destination>[
Destination(title: 'Calculate', icon: Icons.edit, body: const Calculator()),
Destination(
title: 'Detail',
icon: Icons.details,
)
];
但是它一直显示错误,无论我是否添加const,都必须使用常量值初始化const变量。 Calculator()
只是StatefulWidget。因此,感谢您对我做错事的帮助。
答案 0 :(得分:1)
如果使Calculator构造函数为const会怎样:
class Calculator extends StatefulWidget {
const Calculator({Key key}) : super(key: key);
@override
_CalculatorState createState() => _CalculatorState();
}
答案 1 :(得分:1)
正如我所说,Calculator
没有const
构造函数。有时您无法为小部件创建const
构造函数。因为小部件必须为immutable class
,否则可能会破坏您的用途。
在Flutter中,有些小部件具有const constructor
,而有些则没有(例如Column,Row,AnimatedContainer)。通常原因是它们是交互式的(内部和外部)。
示例中的另一个技巧是,如果将const
放在variable
的右边,即分配does not need any const
的右边。因为如果此变量为const,则右侧必须已经为const,因此无需每次都定义const
。
对树同样有效,如果父级具有const
,则子级必须是const,而无需放置其他const。
在您的示例中,如果Calculator
具有const构造函数,则将const放入Calculator不会有任何区别。
因此,该功能与您的功能完全相同:
const List<Destination> allDestinations = <Destination>[
Destination(title: 'Calculate', icon: Icons.edit, body: Calculator()),
Destination(
title: 'Detail',
icon: Icons.details,
)
];