vertical method

Widget vertical(
  1. double aniValue,
  2. int index,
  3. double page,
  4. Widget child,
)

Implementation

Widget vertical(double aniValue, int index, double page, Widget child) {
  if (page == index) {
    return child;
  } else if (page > index) {
    ///当前要离开的页面  (aniValue  1-0)
    return LayoutBuilder(builder: (context, constraints) {
      return Transform.translate(
        offset: Offset(0, constraints.maxHeight * (1 - aniValue)),
        child: Transform(
            alignment: Alignment.center,
            transform: Matrix4.identity()
              ..rotateX((pi * (1 - aniValue)).clamp(0, pi / 2)),
            child: child),
      );
    });
  } else {
    ///下一个要进来的页面  (aniValue  0-1)
    return LayoutBuilder(builder: (context, constraints) {
      return Transform.translate(
        offset: Offset(0, -constraints.maxHeight * (1 - aniValue)),
        child: Transform(
          alignment: Alignment.center,
          transform: Matrix4.identity()
            ..rotateX((pi * aniValue).clamp(pi / 2, pi)),
          child: Transform(
            alignment: Alignment.center,
            transform: Matrix4.identity()..rotateX(pi),
            child: child,
          ),
        ),
      );
    });
  }
}