페이지 애니메이션

Navigator.push() 를 누르면 아래에서 올라오는게 맘에 안들 수 있음.

이와 연관해서 바꿀 수 있는 방법.

일단 유저를 누르면 프로필이 보일 수 있게 만들어보자.

Text(widget.jsondata[index]['user']),

위 Text 안에는 onPressed같은 애를 쓸 수 없음

 GestureDetector(
                    child: Text(widget.jsondata[index]['user']),
                    onTap: (){

                    },
                    onDoubleTap: (){},
                    onHorizontalDragStart: (){},
                    onLongPress: (){},
                  ),

위와 같이 사용하면 탭했을 때, 두번탭했을 때, 수직으로 드래그했을 때, 길게 눌렀을 때, 등등의 제스처 이벤트를 받을 수 있으니 이를 사용하면 됨!

onTap: (){
            Navigator.push(context,
              MaterialPageRoute(builder: (c)=> Text('위젯'))
            );
          },

이런식으로 사용하면 유저 아이디 클릭 시 프로필 페이지가 뜨게 만들 수 있음.

class Profile extends StatelessWidget {
  const Profile({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
     appBar: AppBar(),
     body: Text('프로필페이지')
    );
  }
}

이런식으로 프로필 페이지를 만들었음.

근데 스와이프 형태로 나오게 하고 싶음.

애니메이션 쪽인데..

CupertinoPageRoute
Navigator.push(context,
  CupertinoPageRoute(builder: (c)=> Profile())
);

이런식으로 사용하면 왼쪽에서 슬라이드 해서 옴 쿠퍼티노 페이지가 아이폰에서 사용하는 애들임.

PageRouteBuilder 사용

이렇게 사용하면 애니메이션 커스터마이징을 할 수 있음

PageRouteBuilder(
  pageBuilder: (c, a1, a2) => Profile(),
  transitionsBuilder: (c, a1, a2, child) =>
    FadeTransition(opacity: a1, child: child)
)

애니메이션 위젯은

  • FadeTransition()
  • PositionedTransition()
  • ScaleTransition()
  • RotationTransition()
  • SlideTransition()

뭐 이런것들이 있음. 필요할 때 사용하면 됨.

참고로.. child 파라미터는 profile() 커스텀 위젯을 의미함. 맨 앞의 c는 context, 무시할 것. a1 : animate parameter 라고 하는데 페이지 전환이 다 되면 1, 되기 전 0 opacity를 a1으로 집어넣었으니 a1을 따라서 투명도가 변화되게 만들어라라고 하는 것과 같음

뭐 이해까지는 필요없고 그냥 따라서 사용하면됨. a2는 기존 페이지가 바뀌는 상태 a1은 새로운 페이지가 바뀌는 상태

transitionDuration: Duration(milliseconds: 500) 를 사용하면 애니메이션 속도 조절을 할 수 있음.

SlideTransition 을 사용하면

SlideTransition(
    position: Tween(
      begin: Offset(-1.0, 0.0), // 시작좌표
      end: Offset(0.0, 0.0), // 끝좌표
    ).animate(a1), 
    child: child
)

위와 같이 사용하면 된다.

시작좌표 : x좌표, y좌표 임.

오른쪽 왼쪽 왼쪽 오른쪽 방향 설정 가능

Hero라는 애도 있음 얘는 확대할 때, 같은 위젯을 연결해서 확대해서 새로운페이지로 만들어주는 식의 위젯이라고 보면 됨.