프로그래밍 공부 메모/flutter
ExpansionPanel 펼치고 접기
jjs815
2022. 12. 25. 15:38
리스트 목록을 펼치고 접을 수 있는 위젯
하나의 아이템을 위주로 위아래로 크기 펼쳤을 때 자동으로 넓이를 키워준다
아래 그림과 같이 더 자세한 콘텐츠를 볼 수 있게 구성할 수 있다
이것과 유사한 expansiontile 위젯이 있으며 차이점으로는 expansionpanel은 빨간색 화살표를 눌러야 동작하며
expansiontile은 회색 화살표와 같이 하나의 bar를 누르면 동작하는 것 같다 (설정 페이지 만들 때 적당할 할 것 같다)
import 'package:flutter/material.dart';
class Item {
String headerText; //* panel 문구
Widget expandedWidget; //* 펼쳤을때 안쪽 컨텐츠
bool isExpanded; //* pnael on/off
Item(
{required this.headerText,
required this.expandedWidget,
this.isExpanded = false});
}
class HomeListPanel extends StatefulWidget {
const HomeListPanel({super.key});
@override
State<HomeListPanel> createState() => _HomeListPanelState();
}
class _HomeListPanelState extends State<HomeListPanel> {
final List<Item> _data = List<Item>.generate(10, (index) {
return Item(
headerText: '$index 2022-12-21\n거래처명', expandedWidget: Text('test'));
});
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: ExpansionPanelList(
//* expansionCallback -> panel 펼쳤는지 on/off
expansionCallback: (panelIndex, isExpanded) {
setState(() {
_data[panelIndex].isExpanded = !isExpanded;
});
},
children: _data.map<ExpansionPanel>((item) {
return ExpansionPanel(
headerBuilder: (context, isExpanded) {
return ListTile(
title: Text(item.headerText),
);
},
body: ListTile(
title: item.expandedWidget,
// onTap: () {
// setState(() {
// _data.removeWhere((currentItem) => item == currentItem);
// });
// },
),
isExpanded: item.isExpanded,
);
}).toList(),
),
);
}
}
반응형