gpt4 book ai didi

flutter - 另一个打开时如何关闭一个ExpandablePanel?

转载 作者:行者123 更新时间:2023-12-03 03:25:34 25 4
gpt4 key购买 nike

我想使用Expandable-ExpandablePanel。问题是第二个打开时如何关闭第一个ExpandablePanel?我尝试使用controller.value,但是找不到诸如action或onChange之类的东西。这该怎么做?

ExpandablePanel(
controller: categoryController,
iconPlacement: ExpandablePanelIconPlacement.right,
header: Container(
margin: EdgeInsets.only(left: 40.0),
child: Text(
'Category',
style: TextStyle(
fontSize: 21.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
)),
expanded: Container(
child: Icon(Icons.close)),
tapHeaderToExpand: true,
hasIcon: true,
),
ExpandablePanel(
controller: subCategoryController,
iconPlacement: ExpandablePanelIconPlacement.right,
header: Container(
margin: EdgeInsets.only(left: 40.0),
child: Text(
'SubCategory',
style: TextStyle(
fontSize: 21.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
)),
expanded: Container(
child: Icon(Icons.close)),
tapHeaderToExpand: true,
hasIcon: true,
),

最佳答案

您是否使用 Expandable 软件包来 flutter ?

如果是,则该软件包不具有此功能。

read this

但是,您可以通过自己编写一些自定义代码来实现。

我尝试了一下,并能够通过一些自定义技巧来做到这一点。


class _ExpandableDemoState extends State<ExpandableDemo> {
ExpandableController categoryController, subCategoryController;

@override
void initState() {
// TODO: implement initState
super.initState();

categoryController = ExpandableController(initialExpanded: false);
subCategoryController = ExpandableController(initialExpanded: false);
}

@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
children: <Widget>[
GestureDetector(
onTap: (){
_toggleExpandables(0);
},
child: ExpandablePanel(
controller: categoryController,
iconPlacement: ExpandablePanelIconPlacement.right,
header: Container(
margin: EdgeInsets.only(left: 40.0),
child: Text(
'Category',
style: TextStyle(fontSize: 21.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
)),
expanded: Container(child: Icon(Icons.close)),
tapHeaderToExpand: false,
hasIcon: true,
),
),
GestureDetector(
behavior: HitTestBehavior.deferToChild,
onTap: (){
_toggleExpandables(1);
},
child: ExpandablePanel(
controller: subCategoryController,
iconPlacement: ExpandablePanelIconPlacement.right,
header: Container(
margin: EdgeInsets.only(left: 40.0),
child: Text(
'SubCategory',
style: TextStyle(fontSize: 21.0, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
)),
expanded: Container(child: Icon(Icons.close)),
tapHeaderToExpand: false,
hasIcon: true,
),
),
],
),
),
);
}

_toggleExpandables(int index){
setState(() {
categoryController.value = false;
subCategoryController.value = false;

_getController(index).value = true;
});
}

ExpandableController _getController(int index){
switch(index){
case 0:
return categoryController;
case 1:
return subCategoryController;
}
}
}

请注意-此代码不是最终代码,请尽快制作。您可以根据需要重构此代码以提高性能。

关于flutter - 另一个打开时如何关闭一个ExpandablePanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57955125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com