Flutter 如何使ExpansionPanel列表中的一个ExpansionPanel与其他ExpansionPanel不同?颤振

Flutter 如何使ExpansionPanel列表中的一个ExpansionPanel与其他ExpansionPanel不同?颤振,flutter,flutter-layout,Flutter,Flutter Layout,如问题所示,我有一个ExpansionPanelList,一个ExpansionPanel(最后一个或第七个)应该有两个额外的按钮,但是我如何才能将它们添加到最后一个面板中&而不是所有其他面板中 这是我的整个扩展面板的代码,因为我不确定您必须在哪里添加行为,但在扩展面板的主体中猜测(接近第40行): class ExpansionList扩展了StatefulWidget{ 最终信息; 常量扩展列表({ 关键点, 这个.info, }):super(key:key); @凌驾 _Expansio

如问题所示,我有一个ExpansionPanelList,一个ExpansionPanel(最后一个或第七个)应该有两个额外的按钮,但是我如何才能将它们添加到最后一个面板中&而不是所有其他面板中

这是我的整个扩展面板的代码,因为我不确定您必须在哪里添加行为,但在扩展面板的主体中猜测(接近第40行):

class ExpansionList扩展了StatefulWidget{
最终信息;
常量扩展列表({
关键点,
这个.info,
}):super(key:key);
@凌驾
_ExpansionListState createState()=>\u ExpansionListState();
}
类_ExpansionListState扩展状态{
小部件_buildListPanel(){
返回容器(
儿童:主题(
数据:Theme.of(context).copyWith(
cardColor:Color(0xffDDBEA9),
),
孩子:ExpansionPanelist(
分割颜色:颜色。透明,
海拔:0,
expansionCallback:(int索引,bool扩展){
设置状态(){
infos[index].isExpanded=!isExpanded;
});
},
子项:infos.map((Info){
返回扩展面板(
headerBuilder:(BuildContext上下文,bool isExpanded){
返回列表块(
标题:!isExpanded
?文本(
info.headerValue,
)//如果上述语句为真,则编码
:文本(
info.headerValue,
textScaleFactor:1.3,
样式:TextStyle(
fontWeight:fontWeight.bold,
),
),
);
},
主体:填充物(
填充:常数边集全部(8.0),
子:容器(
装饰:盒子装饰(
颜色:颜色(0xffFFE8D6),
边界半径:边界半径。圆形(25)),
子:列(
儿童:[
ListView.separated(
物理学:const NeverScrollableScrollPhysics(),
收缩膜:对,
填充:仅限边集(左:40.0,),
itemCount:info.expandedValueData.length,
itemBuilder:(上下文,索引){
返回CheckboxListTile(
标题:文本(info.expandedValueData[index]。标题,
样式:TextStyle(
装饰:信息expandedValueData[索引]
.完成
?text.lineThrough
:null)),
值:info.expandedValueData[索引]。已完成,
一旦更改:(值){
设置状态(){
//在这里,您可以切换选中的项目状态
infos.firstWhere(
(currentInfo=>info==currentInfo)
..expandedValueData[索引]。已完成=
价值
});
});
},
separatorBuilder:(BuildContext,int索引){
返回大小框(
身高:20,
);
},
),
世界其他地区(儿童:[
大小盒子(
宽度:MediaQuery.of(context).size.width*0.16),
文本(“Abschnitt bis zum Neustart löschen”),
大小盒子(
宽度:MediaQuery.of(context).size.width*0.11),
图标按钮(
图标:图标(Icons.delete),
已按下:(){
设置状态(){
infos.removehere(
(currentInfo=>info==currentInfo);
});
},
)
]),
],
),
),
),
iExpanded:info.iExpanded);
}).toList(),
),
),
);
}
@凌驾
小部件构建(构建上下文){
返回SingleChildScrollView(
子:容器(
子项:_buildListPanel(),
),
);
}
}
谢谢你的建议

Hi只需在info对象中添加一个字段(如果您还没有),该字段将允许您更改基于该字段膨胀的小部件。 比如说

...
children: infos.map<ExpansionPanel>((Info info) {
  return ExpansionPanel(
    headerBuilder: (BuildContext context, bool isExpanded) {
      return info.type == TYPE_A ? TypeAWidgetHeader(info) : TypeBWidgetHeader(info);
    body: info.type == TYPE_A ? TypeAWidgetBody(info) : TypeBWidgetBody(info);
...
。。。
子项:infos.map((Info){
返回扩展面板(
headerBuilder:(BuildContext上下文,bool isExpanded){
return info.type==type_A?TypeAWidgetHeader(信息):TypeBWidgetHeader(信息);
body:info.type==type_A?TypeAWidgetBody(info):TypeBWidgetBody(info);
...

我有3个问题,1.当我不想更改标题时,我可以跳过这一行吗:“return info.type==type_A?TypeAWidgetHeader(info):typebwidgetsheader(info);”,2.如果我理解正确,type_A在我的情况下保存信息,应该生成的磁贴是普通的还是“自定义的”面板,但我如何定义类型_A,使其具有自定义面板位于第7位置的信息?3.最后,我必须为常规&fo创建一个新的主体类
...
children: infos.map<ExpansionPanel>((Info info) {
  return ExpansionPanel(
    headerBuilder: (BuildContext context, bool isExpanded) {
      return info.type == TYPE_A ? TypeAWidgetHeader(info) : TypeBWidgetHeader(info);
    body: info.type == TYPE_A ? TypeAWidgetBody(info) : TypeBWidgetBody(info);
...