Метод radio
Метод radio виджета ExpansionPanelList Конструктор ExpansionPanelList.radio принимает
ExpansionPanelRadio
в children.
В expansionCallback обновляют isExpanded
только у выбранной панели.
Подходит для взаимоисключающих блоков FAQ.
Синтаксис
ExpansionPanelList.radio(
children: [
ExpansionPanelRadio(
value: 0,
headerBuilder: (context, isExpanded) => Text('abcde'),
body: Text('12345'),
),
],
expansionCallback: (int index, bool isExpanded) {},
)
Параметры
| Параметр | Описание |
|---|---|
children |
Список ExpansionPanelRadio с value.
|
expansionCallback |
Индекс панели и новое состояние expanded. |
Пример
Давайте покажем две radio-панели:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: PanelRadioDemo()));
}
class PanelRadioDemo extends StatefulWidget
{
const PanelRadioDemo({super.key});
@override
State<PanelRadioDemo> createState() => _PanelRadioDemoState();
}
class _PanelRadioDemoState extends State<PanelRadioDemo>
{
int? expandedIndex;
@override
Widget build(BuildContext context)
{
return Scaffold(
body: SingleChildScrollView(
child: ExpansionPanelList.radio(
initialOpenPanelValue: 0,
expansionCallback: (index, isExpanded) {
setState(() {
expandedIndex = isExpanded ? index : null;
});
},
children: [
ExpansionPanelRadio(
value: 0,
headerBuilder: (context, isExpanded) {
return ListTile(title: Text('abcde'));
},
body: Padding(
padding: EdgeInsets.all(16),
child: Text('12345'),
),
),
ExpansionPanelRadio(
value: 1,
headerBuilder: (context, isExpanded) {
return ListTile(title: Text('12345'));
},
body: Padding(
padding: EdgeInsets.all(16),
child: Text('abcde'),
),
),
],
),
),
);
}
}
Открыта будет не больше одной панели за раз.
Пример
Давайте стартуем с панели value: 1:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: PanelRadioInitDemo()));
}
class PanelRadioInitDemo extends StatefulWidget
{
const PanelRadioInitDemo({super.key});
@override
State<PanelRadioInitDemo> createState() => _PanelRadioInitDemoState();
}
class _PanelRadioInitDemoState extends State<PanelRadioInitDemo>
{
@override
Widget build(BuildContext context)
{
return Scaffold(
body: ExpansionPanelList.radio(
initialOpenPanelValue: 1,
expansionCallback: (index, isExpanded) {
setState(() {});
},
children: [
ExpansionPanelRadio(
value: 1,
headerBuilder: (context, isExpanded) {
return Text('abcde');
},
body: Text('abcde'),
),
],
),
);
}
}
initialOpenPanelValue задаёт панель, открытую при первом кадре.
Смотрите также
-
виджет
ExpansionPanelList,
несколькоExpansionPanel -
виджет
ExpansionPanelRadio,
элемент дляradio-списка -
виджет
ExpansionTile,
одна раскрывающаяся строка -
виджет
ExpansionPanel,
панель в обычном списке