pageView 는 말그대로 여러개의 뷰가 페이지를 이뤄 슬라이드로 넘기는 식으로 구성되어 있다.
https://api.flutter.dev/flutter/widgets/PageView-class.html
PageView class - widgets library - Dart API
A scrollable list that works page by page. Each child of a page view is forced to be the same size as the viewport. You can use a PageController to control which page is visible in the view. In addition to being able to control the pixel offset of the cont
api.flutter.dev
나는 이 페이지뷰를 이용해서 화면이 바뀔때(유저가 슬라이드를 해서 다음 화면으로 넘어갈때)를 감지하여 고정된 갯수의 view가 아닌
슬라이드 한 만큼 동적으로 view생성을 구현하고 싶었다.
일단 그 동작으로 감지하려면 onPageChanged 라는 프로퍼티를 쓰면 된다.
처음 공식문서의 예제는 stateless로 되어 있으므로 stateful로 바꿔준다음
onPageChanged 에 들어갈 함수를 정의하고 넣어주면 된다.
class PageViewWidget extends StatefulWidget {
const PageViewWidget({Key? key}) : super(key: key);
@override
State<PageViewWidget> createState() => _PageViewWidgetState();
}
class _PageViewWidgetState extends State<PageViewWidget> {
@override
Widget build(BuildContext context) {
final PageController controller = PageController();
return PageView(
/// [PageView.scrollDirection] defaults to [Axis.horizontal].
/// Use [Axis.vertical] to scroll vertically.
controller: controller,
onPageChanged: onchahged,
children: const <Widget>[
Center(
child: Text('First Page'),
),
Center(
child: Text('Second Page'),
),
Center(
child: Text('Third Page'),
),
],
);
}
onchahged(int index) {
setState(() {
print('페이지 변경');
});
}
}
그럼 화면 전환을 감지했으니
새로운 view 만들 코드를 onchanged 에 넣으면 된다라고 하려했는데
PageVeiw.builder를 사용하여 itemBuilder를 통해 view를 만들어준다.
return PageView.builder(
controller: controller,
itemBuilder: (context, index) {
return Container(
child: Center(
child: Text(index.toString()),
),
);
},


itembuilder의 인자중 하나인 index를 text로 나타낸것이다.
슬라이드 한 만큼 view가 만들어진다.
'Flutter' 카테고리의 다른 글
| Flutter - PageView에서 각 페이지의 값 유지하기 (0) | 2023.03.02 |
|---|---|
| Flutter - 자식이 위젯에서 부모 위젯의 state 바꾸기, input 받기 (0) | 2023.01.07 |
| Flutter - 자식이 위젯에서 부모 위젯의 state 사용하기 (0) | 2023.01.07 |
| Flutter - Dialog/ 모달창 만들기, context (0) | 2023.01.06 |
| Flutter - StatefulWidget 만들기 (0) | 2023.01.06 |