[flutter] 플러터(IndexedStack)에서 인덱스 변경시 이전 페이지의 후처리 작업을 수행하는 방법은 무엇인가요?
- IndexedStack을 사용하는 부모 위젯(StatefulWidget)에서 인덱스 변경 및 후처리 작업을 관리합니다.
class MyParentWidget extends StatefulWidget {
@override
_MyParentWidgetState createState() => _MyParentWidgetState();
}
class _MyParentWidgetState extends State<MyParentWidget> {
int currentIndex = 0;
void changeIndex(int index) {
// 현재 인덱스와 변경될 인덱스를 비교하여 후처리 작업 수행
if (currentIndex == 1 && index == 0) {
// 이전 페이지가 1이었고, 변경될 페이지가 0인 경우에 후처리 작업 수행
// 예를 들어, 이전 페이지에서 데이터를 저장하는 작업 등을 수행할 수 있습니다.
print('Performing post-processing for previous page');
}
currentIndex = index;
setState(() {}); // 인덱스 변경을 적용합니다.
}
@override
Widget build(BuildContext context) {
return Column(
children: [
// 인덱스를 변경하는 버튼 등을 포함한 위젯들...
// 인덱스를 변경하는 콜백을 등록하여 인덱스 변경을 위임합니다.
MyButton(
text: 'Change Index',
onPressed: () {
changeIndex(1); // 예시: 인덱스를 1로 변경
},
),
// IndexedStack으로 여러 페이지를 관리합니다.
IndexedStack(
index: currentIndex,
children: [
// 페이지 0
MyPageWidget0(),
// 페이지 1
MyPageWidget1(),
],
),
],
);
}
}
class MyButton extends StatelessWidget {
final String text;
final VoidCallback onPressed;
const MyButton({required this.text, required this.onPressed});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: Text(text),
);
}
}
class MyPageWidget0 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
// 페이지 0의 위젯 구성...
);
}
}
class MyPageWidget1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
// 페이지 1의 위젯 구성...
);
}
}
- IndexedStack의 index 객체를 직접 사용하여 인덱스 변경 정보를 감지하고 후처리 작업을 수행합니다.
class MyIndexedStack extends StatefulWidget {
@override
_MyIndexedStackState createState() => _MyIndexedStackState();
}
class _MyIndexedStackState extends State<MyIndexedStack> {
int currentIndex = 0;
@override
Widget build(BuildContext context) {
return IndexedStack(
index: currentIndex,
children: [
// 페이지 0
MyPageWidget0(),
// 페이지 1
MyPageWidget1(),
],
);
}
@override
void didUpdateWidget(MyIndexedStack oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.index != currentIndex) {
// 이전 인덱스와 변경된 인덱스를 비교하여 후처리 작업 수행
if (oldWidget.index == 1 && currentIndex == 0) {
// 이전 페이지가 1이었고, 변경된 페이지가 0인 경우에 후처리 작업 수행
// 예를 들어, 이전 페이지에서 데이터를 저장하는 작업 등을 수행할 수 있습니다.
print('Performing post-processing for previous page');
}
}
}
}
두 가지 방법 모두 인덱스 변경 시 후처리 작업을 수행하는 방법을 제공합니다. 필요에 따라 상황에 맞게 선택하여 사용하시면 됩니다.