How get selected index of ListView and ListTile of multiple submenus sidebar?

361 Views Asked by At

How get selected index of ListView and ListTile of multiple submenu's sidebar in Flutter?

Flutter submenu selected index

This is my code:

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(),
      );
    }
  }
}

How get selected index of ListView and ListTile of multiple submenus sidebar in Flutter?

1

There are 1 best solutions below

1
Sparko Sol On

You can use the index for loop as following.

@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),
            )
        ],
      );
    }
  }