ExpansionPanelList无法展开或折叠ExpansionPanel

3

我正在使用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() 能够展开或折叠,但它没有发生展开或折叠。


你的代码对我来说完美运行了... - Marcel
我将_allTabinitState()中取出并放置在返回Scaffold之前的build()中,现在它可以正常工作了。 - Alejandro Garcia
1个回答

0

initState()中初始化小部件可能会导致在等待initState()完成之前首先调用Widget build。如果小部件不需要在initState()中,最好将它们移动到Widget build()内部。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接