const List<Widget> WIDGETS = <Widget>[
Widget1,
Widget2,
Widget3,
Widget4,
];
final int index = 1;
Navigator.pushReplacement(context, MaterialPageRoute<Widget>(builder: (BuildContext context) => WIDGETS[index](hey: index))));
但是,在窗口小部件列表中出现以下错误:
The element type 'Type' can't be assigned to the list type 'Widget'. dart(list_element_type_not_assignable)
我不想使用dynamic
或类似名称,有没有办法声明它们是小部件Type
?
类似于JS的是typeof
。
void a() {
print('a');
}
void b() {
print('b');
}
const List<Function> EXAM_SCREENS = <Function>[
a,
b,
a,
a,
];
为什么我的情况不是这样?
编辑:为澄清起见,我需要将动态参数传递给这些小部件。
Widget1
需要hey
参数。
因为在您初始化它们之前,它们不是小部件,相反,它们不需要像函数一样进行初始化(因为您将指针传递给函数)。
以这种方式:
const List<Widget> WIDGETS = <Widget>[
Widget1,
Widget2,
Widget3,
Widget4,
];
您正在存储类型的列表,然后,如果您尝试像这样更改它们,则不会出现任何错误。
const List<Type> WIDGETS = <Type>[
Widget1,
Widget2,
Widget3,
Widget4,
];