Flutter ExpansionPanel 不在 ListView 上展开

Posted

技术标签:

【中文标题】Flutter ExpansionPanel 不在 ListView 上展开【英文标题】:Flutter ExpansionPanel don't expand on ListView 【发布时间】:2019-12-15 21:10:29 【问题描述】:

在这个简单的代码中,我试图在ListView 中添加ExpansionPanelList,在实现之后,ExpansionPanel 在单击以展开或折叠后不会展开

import 'package:flutter/material.dart';

void main()=>runApp(MaterialApp(home: App()));

class App extends StatefulWidget 
  @override
  State<StatefulWidget> createState()=>_App();


class _App extends State<App> 
  List<NewItem> items = [];
  @override
  Widget build(BuildContext context) 

    items=[];

    List.generate(5, (int index) 
      items.add(NewItem(
        false,
        'aaaaa',
        Container(child:Text('1')),
        Container(child:Text('2')),
      ));
    );

    return Scaffold(body: ListView(
      children: [
        new Padding(
          padding: new EdgeInsets.all(10.0),
          child: new ExpansionPanelList(
            expansionCallback: (int index, bool isExpanded) 
              setState(() 
                items[index].isExpanded = !items[index].isExpanded;
              );
            ,
            children: items.map((NewItem item) 
              return new ExpansionPanel(
                headerBuilder: (BuildContext context, bool isExpanded) 
                  return new ListTile(
                      leading: item.image,
                      title: new Text(
                        item.header,
                        textAlign: TextAlign.right,
                        style: new TextStyle(
                          fontSize: 20.0,
                          fontWeight: FontWeight.w400,
                        ),
                      ));
                ,
                isExpanded: item.isExpanded,
                body: item.body,
              );
            ).toList(),
          ),
        )
      ],
    ),);
  


class NewItem 
  bool isExpanded;
  final String header;
  final Widget body;
  final Widget image;

  NewItem(this.isExpanded, this.header, this.body, this.image);

【问题讨论】:

【参考方案1】:

问题解决了

  @override
  void initState() 
    super.initState();
    List.generate(5, (int index) 
      items.add(NewItem(
        false,
        'aaaaa',
        Container(child:Text('1')),
        Container(child:Text('2')),
      ));
    );
  

【讨论】:

以上是关于Flutter ExpansionPanel 不在 ListView 上展开的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Slider 未在 ExpansionPanel 内部重建

Flutter Wrap 小部件对齐:在 ExpansionPanel 内部

Flutter学习日记之ExpansionPanel/ExpansionTile实现分级列表(可开闭)

Flutter学习日记之ExpansionPanel/ExpansionTile实现分级列表(可开闭)

Flutter折叠展开列表的使用

Flutter折叠展开列表的使用