일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- listview
- GitHub
- Animation
- 플러터
- MS-SQL
- 리엑트
- 파이어베이스
- spring boot
- Maui
- Firebase
- MSSQL
- React JS
- Binding
- 닷넷
- 함수
- page
- HTML
- Flutter
- 깃허브
- typescript
- MVVM
- 오류
- JavaScript
- 바인딩
- 애니메이션
- .NET
- 마우이
- AnimationController
- db
- 자바스크립트
Archives
- Today
- Total
개발노트
25. [Flutter] PageView List의 item 값 Page형태로 전환시키기 본문
반응형
PageView
PageView는 여러 페이지를 가로 또는 세로로 스크롤하여 전환할 수 있도록 해줍니다. 주로 이미지 갤러리, 사용자 안내 등 다양한 상황에서 사용됩니다.
- controller: PageController를 지정합니다. PageController는 페이지의 전환을 제어하는 Widget입니다.
- children: PageView에 표시할 Widget의 목록입니다.
- scrollDirection: 스크롤 방향을 지정합니다. scrollDirection은 horizontal, vertical 중 하나를 선택할 수 있습니다.
- pageSnapping: 페이지가 전환될 때 페이지를 정지시키는 여부를 지정합니다. pageSnapping은 true, false 중 하나를 선택할 수 있습니다.
- viewportFraction: 페이지의 가로 너비 또는 세로 높이를 지정합니다. viewportFraction은 0.0에서 1.0 사이의 값을 지정할 수 있습니다.
- pageBuilder: 페이지를 생성하는 함수입니다. pageBuilder 함수는 currentPage 인자를 받아 현재 페이지의 인덱스를 전달받습니다.
- children 또는 itemBuilder: children을 사용하여 각 페이지의 위젯을 정적으로 지정하거나, itemBuilder를 사용하여 동적으로 페이지를 생성할 수 있습니다.
itemBuilder는 페이지 인덱스를 매개변수로 받아 해당 페이지의 위젯을 반환합니다. - onPageChanged: 페이지 전환이 발생할 때 호출되는 콜백 함수를 지정합니다. 현재 페이지 인덱스를 매개변수로 받아 추가 동작을 수행할 수 있습니다.
예시.
import 'package:flutter/material.dart';
class TestScreen extends StatefulWidget {
const TestScreen({super.key});
@override
State<TestScreen> createState() => _TestScreenState();
}
class _TestScreenState extends State<TestScreen> {
final colorList = [
Colors.red,
Colors.amber,
Colors.blue,
Colors.purple,
Colors.green
];
final PageController _pageController = PageController();
void _onPageChanged(int index) {
setState(() {
if (index == 10) {
_pageController.animateToPage(0,
duration: const Duration(seconds: 2), curve: Curves.bounceOut);
}
if (index == colorList.length - 1) {
colorList.add(Colors.brown);
colorList.add(Colors.deepOrange);
colorList.add(Colors.cyan);
}
});
}
@override
void initState() {
_pageController.addListener(
() {
_onPageChanged;
},
);
super.initState();
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView.builder(
scrollDirection: Axis.vertical,
onPageChanged: _onPageChanged,
itemCount: colorList.length,
controller: _pageController,
itemBuilder: (context, index) {
return Center(
child: Container(
decoration: BoxDecoration(color: colorList[index]),
child: Center(
child: Text(
'index: $index',
style: const TextStyle(
fontSize: 32, fontWeight: FontWeight.bold),
),
),
),
);
},
),
);
}
}
설명.
- 이 예시 코드는 TestScreen 클래스를 정의하고, 그 안에서 PageView.builder를 사용하여 페이지 전환 애니메이션을 적용합니다. colorList라는 리스트에 다양한 색상을 저장하고, PageController를 생성하여 페이지 전환을 관리합니다.
- _onPageChanged 메서드는 현재 페이지 인덱스를 매개변수로 받고, 페이지 전환에 따라 상태를 업데이트합니다. 예를 들어, 인덱스가 10일 경우 페이지를 처음으로 돌아가는 애니메이션을 실행합니다. 인덱스가 colorList의 길이에서 1 뺀 값과 같을 경우, 추가적인 색상을 colorList에 추가합니다.
- initState 메서드에서는 _pageController의 리스너를 등록하여 페이지 전환 이벤트를 감지하고, _onPageChanged 메서드를 호출합니다. dispose 메서드에서는 _pageController를 정리합니다.
- build 메서드에서는 PageView.builder를 사용하여 페이지를 렌더링합니다. scrollDirection 속성을 Axis.vertical로 설정하여 세로 방향으로 스크롤할 수 있도록 합니다. onPageChanged 콜백은 페이지 전환이 발생할 때 _onPageChanged 메서드를 호출합니다. itemCount는 colorList의 길이를 지정하고, controller는 _pageController를 사용합니다. itemBuilder에서는 각 페이지에 해당하는 컨텐츠를 만들어 반환합니다. 여기서는 각 페이지의 배경색과 인덱스를 표시하는 텍스트를 출력합니다.
- 이렇게 구성된 TestScreen 위젯을 앱의 메인 위젯으로 사용하면 페이지 전환 애니메이션을 포함한 페이지 스크롤 화면을 만들 수 있습니다.
빌드.
반응형
'앱 개발 > Flutter' 카테고리의 다른 글
27. [Flutter] showModalBottomSheet 로 하단에서 올라오는 작은 화면 만들기 (0) | 2023.09.13 |
---|---|
26. [Flutter] VideoPlayer 위젯으로 앱에 동영상 활용하기 (0) | 2023.07.19 |
24. [Flutter] AnimatedCrossFade 화면 전환 애니메이션 및 Drag 기능 만들기(with GestureDetector) (0) | 2023.07.07 |
23. [Flutter] TabBarView 화면 넘기기 기능 만들기 (0) | 2023.07.07 |
22. [Flutter] ScrollBar 스크롤 할 때 AppBar title 표시하기 (0) | 2023.07.04 |
Comments