Виджет ExpansionPanelList
Виджет ExpansionPanelList показывает панели
ExpansionPanel
в children.
Переключение - expansionCallback,
только одна открыта - expansionCallback с индексом,
вариант radio -
radio.
Синтаксис
ExpansionPanelList(
expansionCallback: (int panelIndex, bool isExpanded) {},
children: [
ExpansionPanel(
headerBuilder: (context, isExpanded) => Text('abcde'),
body: Text('12345'),
),
],
)
Параметры
| Параметр | Описание |
|---|---|
children |
Список ExpansionPanel.
|
expansionCallback |
Индекс панели и новое состояние expanded. |
Методы
| Метод | Описание |
|---|---|
radio |
Держит открытой только одну панель. |
Пример
Давайте откроем одну панель:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: PanelListDemo()));
}
class PanelListDemo extends StatefulWidget
{
const PanelListDemo({super.key});
@override
State<PanelListDemo> createState() => _PanelListDemoState();
}
class _PanelListDemoState extends State<PanelListDemo>
{
int idx = 0;
@override
Widget build(BuildContext context)
{
return Scaffold(
body: ExpansionPanelList(
expansionCallback: (i, open) {
setState(() => idx = open ? i : -1);
},
children: [
ExpansionPanel(
isExpanded: idx == 0,
headerBuilder: (c, e) => Text('abcde'),
body: Text('12345'),
),
],
),
);
}
}
Раскрытая панель покажет '12345'.
Пример
Давайте используем elevation:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: ExpansionPanelList(
elevation: 2,
expansionCallback: (i, o) {},
children: [
ExpansionPanel(
headerBuilder: (c, e) => Text('12345'),
body: Text('abcde'),
),
],
),
),
),
);
}
Панель получит лёгкую тень.
Смотрите также
-
класс
ExpansionPanel,
элемент списка -
виджет
ExpansionTile,
одна строка-аккордеон -
класс
ExpansionPanelRadio,
панель сradio -
метод
radio,
конструкторradio-списка