Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
570 of 1024 menu
◀ ▶

Метод 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 задаёт панель, открытую при первом кадре.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить