为什么我不能在"Only static members can be accesed in initializers"颤振的扩展面板中加载实际数据?



我查看了官方文档flutter扩展面板,作为构建自己的参考。我很难让它们工作,也很难处理我的数据。我已经尝试将我的小部件接收到的一些数据传递到它的构造函数中,以便在生成面板列表时使用。我希望这些代码片段已经足够了,如果没有,我可以添加更多。

这里是错误弹出的地方(当试图引用widget.contations时(

class FinancialTabContent extends StatefulWidget {
final List<Contract> contracts;
final Person travelOfficer;
FinancialTabContent({this.contracts, this.travelOfficer});
@override
_FinancialTabContentState createState() => _FinancialTabContentState();
}
class _FinancialTabContentState extends State<FinancialTabContent> {
List<ExpandableItem> expansionPanels = generateExpansionPanels(widget.contracts);  
@override
Widget build(BuildContext context) {
...

这是我打算用来构建面板列表的,它被放置在_FinancialTabContentState 中

Widget _buildPanelList() {
return ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
expansionPanels[index].isExpanded = !isExpanded;
});
},
children: expansionPanels.map<ExpansionPanel>((ExpandableItem item) {
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
....
isExpanded: item.isExpanded,
);
}).toList(),
);

这是可扩展项目的代码

import 'contract.dart';
class ExpandableItem {
ExpandableItem({    
this.isExpanded = false,
this.panelData
});
bool isExpanded;
Contract panelData; 
}
List<ExpandableItem> generateExpansionPanels(List<Contract> panelsData) {
return List.generate(panelsData.length, (int index) {
return ExpandableItem(
panelData: panelsData[index],
);
});
}

将此行移动到build方法内:

List<ExpandableItem> expansionPanels = generateExpansionPanels(widget.contracts);

或者在initState方法中这样做,如果你只想做一次:

class _FinancialTabContentState extends State<FinancialTabContent> {
List<ExpandableItem> expansionPanels;
@override
void initState() {
super.initState();
expansionPanels = generateExpansionPanels(widget.contracts);
}
@override
Widget build(BuildContext context) {...}
}

阅读State上的文档,这些文档详细描述了Widget的生命周期。

最新更新