Flutter 一次展开一个扩展磁贴

Flutter 一次展开一个扩展磁贴,flutter,flutter-layout,Flutter,Flutter Layout,我有一个扩展磁贴列表,每个扩展磁贴都包含一个列表磁贴。现在我要做的是在单击一个扩展平铺时折叠所有已扩展的平铺。我只想一次扩展并显示一个扩展磁贴。 或是否有任何方法可以将此迁移到扩展面板 child: Card( child: ExpansionTile( key: _expansionKey,

我有一个扩展磁贴列表,每个扩展磁贴都包含一个列表磁贴。现在我要做的是在单击一个扩展平铺时折叠所有已扩展的平铺。我只想一次扩展并显示一个扩展磁贴。 是否有任何方法可以将此迁移到扩展面板

                      child: Card(
                            child: ExpansionTile(
                              key: _expansionKey,
                              backgroundColor: Colors.black12,
                              onExpansionChanged: (val) {
                                setState(() {
                                  preId = prescriptionProvider
                                      .doctorPrescriptions[index]
                                      .prescriptionId;
                                  fetchDoctorPrescriptionDrugsByDoctor(
                                      preId);
                                });
                                Toast.show("Changed", context);
                              },
                              title: Text("Prescription ID : " +
                                  prescriptionProvider
                                      .doctorPrescriptions[index]
                                      .prescriptionId),
                              children: <Widget>[
                                InkWell(
                                  onTap: () {

                                  },
                                  child: ListView.builder(
                                    itemCount: presciptionDrugList.length,
                                    shrinkWrap: true,
                                    itemBuilder:
                                        (BuildContext context, int i) {
                                      return ListTile(
                                        title: Text(
                                          presciptionDrugList.isNotEmpty
                                              ? presciptionDrugList[i]
                                                  .drugsName
                                              : "loading",
                                        ),
                                        trailing: Icon(FontAwesomeIcons.pills),
                                      );
                                    },
                                  ),
                                )
                              ],
                            ),
                          ),
child:Card(
子文件:扩展文件(
密钥:_扩展密钥,
背景颜色:Colors.black12,
OneExpansionChanged:(val){
设置状态(){
preId=处方提供者
.医生处方[索引]
.处方d;
获取医生处方药药典(
preId);
});
Toast.show(“已更改”,上下文);
},
标题:文本(“处方ID:”+
处方提供者
.医生处方[索引]
.处方d),
儿童:[
墨水池(
onTap:(){
},
子项:ListView.builder(
itemCount:PresiptionDrugList.length,
收缩膜:对,
项目生成器:
(BuildContext,inti){
返回列表块(
标题:正文(
处方药列表。不是空的
?处方药清单[i]
药剂师
:“加载”,
),
尾随:图标(FontAwesomeIcons.pills),
);
},
),
)
],
),
),

因为我有一个列表数组变量,我在其中获取ListTile的数据,所以打开的tile将显示与我正在展开的tile相同的数据。因此,我想通过折叠它们来隐藏这一点。

此示例是一个解决方法,它只会保持一个tile展开。它的问题是,每次扩展一个分幅时,它都会重新生成整个列表

class _MyHomePageState extends State<MyHomePage> {
    final int max = 10;
    int selected = -1;

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Builder(
        key: Key('builder ${selected.toString()}'),
        builder: (context){
          return ListView(
            children: <Widget>[
              for(int i = 0; i < max; i++)
                ExpansionTile(
                  key: Key(i.toString()),
                  title: Text('Tile ${i+1}'),
                  initiallyExpanded: i==selected,
                  onExpansionChanged: (expanded){
                    if(expanded)
                    setState(() {
                      selected = i; 
                    });
                    else setState(() {
                      selected = -1; 
                    });
                  },
                )
            ],
          );
        },
      )
    );
  }
}
class\u MyHomePageState扩展状态{
最终int最大值=10;
选定的整数=-1;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
车身:建造商(
key:key('builder${selected.toString()}'),
生成器:(上下文){
返回列表视图(
儿童:[
对于(int i=0;i
该示例似乎有效,但我无法相应地配置我的应用程序。你能用我上传的代码片段来完成吗?这个例子似乎很有效,但我无法相应地配置我的应用程序。你能用我上传的代码片段吗?它对我不起作用