flutter 如何获取多个子菜单边栏的ListView和ListTile的选定索引?

bsxbgnwa  于 2022-12-05  发布在  Flutter
关注(0)|答案(1)|浏览(158)

如何获取Flutter中多个子菜单侧边栏的ListViewListTile的选定索引?

这是我的代码:

class _SidebarState extends State<Sidebar> {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ListTile(
          title: Text(
            'test',
            style: TextStyle(color: Colors.lightBlue),
          ),
          leading: Icon(
            Icons.keyboard_command_key,
            size: 40,
            color: Colors.lightBlue,
          ),
        ),
        SizedBox(
          height: 50,
        ),
        Expanded(
          child: ListView(
            children: basictiles.map(buildTile).toList(),
          ),
        ),
      ],
    );
  }

  Widget buildTile(BasicTile tile, {double leftPadding = 16}) {
    if (tile.tiles.isEmpty) {
      return ListTile(
        leading: tile.icon,
        contentPadding: EdgeInsets.only(left: leftPadding),
        title: Text(tile.title),
      );
    } else {
      return ExpansionTile(
        tilePadding: EdgeInsets.only(left: leftPadding),
        leading: tile.icon,
        title: Text(tile.title),
        children: tile.tiles
            .map((tile) => buildTile(tile, leftPadding: 16 + leftPadding))
            .toList(),
      );
    }
  }
}

如何获取Flutter中多个子菜单边栏的ListViewListTile的选定索引?

qlfbtfca

qlfbtfca1#

您可以使用index for循环,如下所示。

@override
  Widget build(BuildContext context) {
    return Material(
      child: Column(
        children: [
          ListTile(
            title: Text(
              'test',
              style: TextStyle(color: Colors.lightBlue),
            ),
            leading: Icon(
              Icons.keyboard_command_key,
              size: 40,
              color: Colors.lightBlue,
            ),
          ),
          SizedBox(height: 50),
          Expanded(
            child: ListView(
              children: [
                for (var i = 0; i < basictiles.length; i++)
                  buildTile(basictiles[i], i),
              ],
              // children: basictiles.map(buildTile).toList(),
            ),
          ),
        ],
      ),
    );
  }
Widget buildTile(BasicTile tile, int mainIndex, {double leftPadding = 16}) {
    if (tile.tiles.isEmpty) {
      return ListTile(
        leading: tile.icon,
        contentPadding: EdgeInsets.only(left: leftPadding),
        title: Text(tile.title),
      );
    } else {
      return ExpansionTile(
        tilePadding: EdgeInsets.only(left: leftPadding),
        leading: tile.icon,
        title: Text(tile.title),
        children: [
          for (var i = 0; i < tile.tiles.length; i++)
            GestureDetector(
              onTap: () {
                print('Main Index: $mainIndex');
                print('Sub Index: $i');
              },
              child: buildTile(tile.tiles[i], i, leftPadding: 16+leftPadding),
            )
        ],
      );
    }
  }

相关问题