[flutter] 플러터(IndexedStack)에서 인덱스 변경시 이전 페이지의 상태를 유지하는 방법은 무엇인가요?

하지만 이전 페이지의 상태를 유지하고 싶다면, 상태를 관리하는 방법이 필요합니다. 예를 들어, StatefulWidget을 사용하여 상태를 유지할 수 있습니다. StatefulWidget은 상태를 관리하기 위해 StatefulWidget 자체와 State 클래스를 사용합니다.

다음은 IndexedStack 위젯에서 이전 페이지의 상태를 유지하는 예시입니다.

import 'package:flutter/material.dart';

class MyIndexedStack extends StatefulWidget {
  @override
  _MyIndexedStackState createState() => _MyIndexedStackState();
}

class _MyIndexedStackState extends State<MyIndexedStack> {
  int currentIndex = 0;
  List<Widget> pages = [
    PageOne(),
    PageTwo(),
    PageThree(),
  ];

  @override
  Widget build(BuildContext context) {
    return IndexedStack(
      index: currentIndex,
      children: pages,
    );
  }
}

class PageOne extends StatelessWidget {
  // PageOne 위젯의 상태를 관리하기 위해 StatefulWidget을 사용할 수도 있습니다.
  // 필요에 따라 StatefulWidget을 사용하여 상태를 유지할 수 있습니다.
  // 예를 들어, TextFormField의 입력 값을 유지하는 등의 상황입니다.
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text('Page One'),
    );
  }
}

class PageTwo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text('Page Two'),
    );
  }
}

class PageThree extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text('Page Three'),
    );
  }
}

위 예제에서는 MyIndexedStack StatefulWidget을 정의하고, _MyIndexedStackState 클래스에서 인덱스와 자식 위젯 목록을 관리합니다. IndexedStack 위젯은 currentIndex 값을 사용하여 현재 인덱스에 해당하는 페이지를 표시합니다.

각각의 페이지 위젯(PageOne, PageTwo, PageThree)은 상태를 유지하고 싶은 경우 StatefulWidget으로 정의할 수 있습니다. 예를 들어, PageOne 위젯에 TextFormField 등의 입력 필드가 있다면, 사용자가 입력한 값을 유지하기 위해 StatefulWidget으로 정의할 수 있습니다.

이렇게 하면 IndexedStack 위젯에서 페이지 인덱스를 변경할 때 이전 페이지의 상태가 유지됩니다.