我正在使用ExpansionPanel()
,并将其放在Tab()
中。 ExpansionPanel()
正常显示,但是它的isExpanded
属性永远不会改变(是的,我有一行代码来改变它),这使得无法折叠或展开ExpansionPanel()
。
我尝试了Flutter中的扩展面板列表和在Flutter中创建带有项目的ExpansionPanelList的答案,但都没有奏效。
我还尝试遵循Flutter扩展面板演示,但也没有奏效。
// ...
class _PlaceExpandedPanelItem {
_PlaceExpandedPanelItem({this.isExpanded, this.header, this.body, this.icon});
bool isExpanded;
final String header;
final Widget body;
final Icon icon;
}
class _HomePage extends State<HomePage> with SingleTickerProviderStateMixin{
int _selectedIndex = 0;
TabController _tabController;
List<_PlaceExpandedPanelItem> _placeExpandedPanelItems = <_PlaceExpandedPanelItem>[
_PlaceExpandedPanelItem(
isExpanded: true,
header: 'Header',
body: Column(
children: <Widget>[
Text('Body')
],
),
icon: null
),
_PlaceExpandedPanelItem(
isExpanded: false,
header: 'Header',
body: Text('Body'),
icon: null
),
];
List<Tab> _allTabs;
@override
void initState() {
super.initState();
_allTabs = <Tab>[
Tab(
child: Container(
child: ListView(
children: <Widget>[
new ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
_placeExpandedPanelItems[index].isExpanded = !_placeExpandedPanelItems[index].isExpanded;
});
},
children: _placeExpandedPanelItems.map((_PlaceExpandedPanelItem _placeExpandedPanelItem){
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return Text(_placeExpandedPanelItem.isExpanded.toString());
},
isExpanded: _placeExpandedPanelItem.isExpanded,
body: _placeExpandedPanelItem.body,
);
}).toList(),
)
],
),
margin: EdgeInsets.all(16.0),
)
),
Tab(
child: Text('Tab 2'),
),
Tab(
child: Text('Tab 3'),
),
];
_tabController = TabController(vsync: this, length: _allTabs.length);
}
// ...
我希望当调用 expansionCallback
时,ExpansionPanel()
能够展开或折叠,但它没有发生展开或折叠。
_allTab
从initState()
中取出并放置在返回Scaffold
之前的build()
中,现在它可以正常工作了。 - Alejandro Garcia