Есть ли виджет, похожий на расширение, в котором можно щелкнуть заголовок отдельной кнопкой? - PullRequest
1 голос
/ 03 мая 2020

Мне нужно меню навигации на моей домашней странице для моего приложения. Я использовал ListView с ExpansionTile в качестве дочерних элементов, но мне нужно, чтобы заголовок был отдельной кнопкой и только downward_arrow, чтобы открыть плитку расширения. Как мне этого добиться? Есть ли здесь виджет, которого я пропускаю?

Я использовал ExpansionPanelList и ExpansionPanel, но результат выглядит ужасно с границами сверху и снизу. Есть ли специальный способ сделать это?

Я также пытался использовать плитку расширения в качестве конечного элемента для плитки списка, но область просмотра выходит за границы.

Код для части плитки расширения

  return Expanded(
      child: ListView(
        children: gridTiles
            .map(
              (tile) => ListTile(
                contentPadding: EdgeInsets.all(10),
                leading: ClipRRect(
                  borderRadius: BorderRadius.circular(4),
                  child: Container(
                    padding: EdgeInsets.all(7),
                    color: tile['color'],
                    child: Icon(
                      tile['icon'],
                      color: Colors.white,
                    ),
                  ),
                ),
//                title: Text("Test"),
                title: ExpansionTile(
                  title: Text(
//                    tile['title'],
                  '',
                    style: TextStyle(
                      color: Colors.black,
                    ),
                  ),
                  children: <Widget>[
                    Text("test"),
                  ],
                ),
              ),
            )
            .toList(),
      ),
    );

Код для части панели расширения

 return ExpansionPanelList(
      expansionCallback: (int index, bool isExpanded) {
        setState(() {
            isExpanded1 = !isExpanded;
        });
      },
      children: gridTiles.map<ExpansionPanel>((tile) {
        return ExpansionPanel(
          body: Text("test body"),
          headerBuilder: (BuildContext context, bool isExpanded) {
            return ListTile(
              leading: Icon(Icons.title),
              title: Text("test"),
              onTap: () => print("Test"),
            );
          },
          canTapOnHeader: true,
          isExpanded: isExpanded1,
        );
      }).toList(),
    );

1 Ответ

0 голосов
/ 03 мая 2020

да, вы можете, просто добавьте виджет, который вы хотите, в качестве заголовка, тогда только стрелка откроет плитку, и вы можете обрабатывать действия с вашим виджетом, как вы хотите, например, с FlatButton

ExpansionTile(
          title: FlatButton(
            child: Text('Button'),
            onPressed: () {
              // clicking the button will trigger this and not open the list tile
              // only the arrow will open it 
              print('button got clicked');
            },
          ),

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...