如何在 Flutter 中的 Column 内使用带有 ListView 的 Expansion Tile

MHD*_*DEZ 2 flutter flutter-layout

我正在尝试创建一个自定义抽屉。

我想DrawerHeader修复。但是,我想要ExpansionTile并且ListView可以滚动。

https://i.stack.imgur.com/RdqFI.jpg

https://i.stack.imgur.com/dN0YN.jpg

 class _NavigationDrawerState extends State<NavigationDrawer> {


  @override
  Widget build(BuildContext context) {
    return Drawer(
      child: Column(
        children: <Widget>[
          DrawerHeader(
            child: Column(....),
          ExpansionTile(
            title: Text('Roles'),
            children: [
              ListView.builder(
                itemBuilder: _buildRolesList,
                itemCount: roles.length,
                shrinkWrap: true,
              )
            ],
          ),
          ListView.builder(
            shrinkWrap: true,
            itemBuilder: _buildList,
            itemCount: myList.length,
          ),
        ],
      ),
    );
  }

  Widget _buildList(BuildContext context, int index) {
    return ListTile(
      leading: Icon(icons[myList[index].toLowerCase()]),
      title: Text(myList[index]),
    );
  }

  Widget _buildRolesList(BuildContext context, int index) {
    return ListTile(
      dense: true,
      title: Text(roles[index]),
      onTap: () {},
    );
  }


}
Run Code Online (Sandbox Code Playgroud)

Cop*_*oad 5

尝试这个:

class _NavigationDrawerState extends State<NavigationDrawer> {
  @override
  Widget build(BuildContext context) {
    return Drawer(
      child: Column(
        children: <Widget>[
          ExpansionTile(
            title: Text('Roles'),
            children: [
              SizedBox(
                height: MediaQuery.of(context).size.height - 100,
                child: ListView.builder(
                  itemBuilder: _buildRolesList,
                  itemCount: roles.length,
                  shrinkWrap: true,
                ),
              )
            ],
          ),
          Expanded(
            child: ListView.builder(
              shrinkWrap: true,
              itemBuilder: _buildList,
              itemCount: myList.length,
            ),
          ),
        ],
      ),
    );
  }

  Widget _buildList(BuildContext context, int index) {
    return ListTile(
      leading: Icon(icons[myList[index].toLowerCase()]),
      title: Text(myList[index]),
    );
  }

  Widget _buildRolesList(BuildContext context, int index) {
    return ListTile(
      dense: true,
      title: Text(roles[index]),
      onTap: () {},
    );
}
Run Code Online (Sandbox Code Playgroud)