[플러터] List View 애니메이션

2021. 8. 28. 00:22·Flutter/Flutter Widget Design

Navigation bar에서 다른 페이지로 이동시에 화면이 부드럽게 전환되는 애니메이션을 본 적이 있을 것이다.

다른 위젯에서도 이를 적용해보자.

Lingory에 적용된 PageView

 

 

PageView

//컨트롤러 정의
PageController _pageController = new PageController(initialPage: 0);

PageView(
physics: NeverScrollableScrollPhysics(), //수동으로 이동이 불가능하도록 함
scrollDirection: Axis.horizontal, //가로로 이동
controller: _pageController, //컨트롤러
children: pages), //List<Widget>

이래도 되나 싶을 정도로 간단하다.

index 변수가 필요 없고 Controller에 의해서 제어된다.

physics에 다른 속성을 부여하면 사용자가 페이지를 넘길 수도 있다.

Controller는 아래의 함수들로 제어할 수 있다.

 

//애니메이션 없이 이동
pageController.jumpTo(currentPageIndex.toDouble());

//애니메이션 적용
pageController
.animateToPage(currentPageIndex,
duration: Duration(milliseconds: 500), curve: Curves.ease)

 

주의점

애니메이션을 위해 화면이 전환될 때 현재의 페이지와 그 다음 페이지가 함께 렌더링된다.

즉, 다음 페이지의 initState뿐만 아니라 현재 페이지의 initState가 한번 더 실행된다는 것이고, 현재 페이지에 setState가 실행된다는 것이다. 따라서 의도치않은 동작이 발생할 수 있다.

이를 해결하기 위해서는 initState에 Future.delayed를 삽입해 Animation의 Duration 만큼을 부여해주면 된다.

 

@override
void initState() {
    Future.delayed(Duration(microseconds: 500), () {
		... //실행할 함수
    });
    super.initState();
  }

 

저작자표시 비영리 변경금지 (새창열림)

'Flutter > Flutter Widget Design' 카테고리의 다른 글

[플러터] ListView 경계선 흐리게 하기  (2) 2021.10.08
[플러터] 이미지에 그림자 넣기  (1) 2021.08.02
[플러터] Font 변경하는 방법  (0) 2020.12.14
[Flutter] 모서리를 둥글게 / 테두리 넣기  (0) 2020.08.22
'Flutter/Flutter Widget Design' 카테고리의 다른 글
  • [플러터] ListView 경계선 흐리게 하기
  • [플러터] 이미지에 그림자 넣기
  • [플러터] Font 변경하는 방법
  • [Flutter] 모서리를 둥글게 / 테두리 넣기
코딩으로세계정복
코딩으로세계정복
Connecting the dots
  • 코딩으로세계정복
    코딩으로 세계정복
    코딩으로세계정복
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    useRef
    Python
    플러터
    자바스크립트
    플러터 웹
    flutter web
    HTML
    파이썬
    링고리
    github
    알고리즘
    프로그래머스
    탐욕법
    react
    TypeScript
    웹
    DART
    CSS
    Flutter
    Redux
    DP
    useState
    포트폴리오
    Lingory
    Firebase
    map
    JavaScript
    리액트
    JSON
    useTranslation
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩으로세계정복
[플러터] List View 애니메이션
상단으로

티스토리툴바