交互挑战 - pageview

313 阅读1分钟

publish

  • pub

    dependencies:
      pageviewj: ^0.0.3
    

部分已实现效果如下

PageViewJ.aniBuilder

flipover

PageViewJ.aniBuilder(
     aniItemBuilder: pageviewAniItem,
)

flipover

PageViewJ.aniBuilder(
     /// HeroCard.dart
     aniItemBuilder: heroAniItem,
)

RotateTransform

flipover

PageViewJ(
     modifier: const Modifier(viewportFraction: .73),
     transform: RotateTransform(),
     itemBuilder: pageViewItem,
)

StackTransform

flipover

PageViewJ(
   modifier: const Modifier(viewportFraction: .73,padEnds: false,
                            scrollDirection: Axis.vertical),
   transform: StackTransform(), itemBuilder: pageViewItem,
)

ClipTransform

ClipTransform.gif

PageViewJ(
    modifier: const Modifier(scrollDirection: Axis.vertical),
    transform: ClipTransform(),
    itemBuilder: pageViewItem,
),

FlipTransform

FlipTransform.gif

PageViewJ(
   modifier: const Modifier(scrollDirection: Axis.horizontal,clipBehavior: Clip.none),
   transform: FlipTransform(),
   itemBuilder: pageViewItem,
)

ShuttersFlipTransform

ShuttersFlipTransform.gif

PageViewJ(
   transform: ShuttersFlipTransform(),
   itemBuilder: pageViewItem,
)

CubeTransform

flipover

PageViewJ(
   transform: CubeTransform(),
   itemBuilder: pageViewItem,
)

ShuttersCubeTransform

ShuttersCubeTransform.gif

PageViewJ(
   transform: ShuttersCubeTransform(),
   itemBuilder: pageViewItem,
)

SlowTransform

SlowTransform.gif

PageViewJ(
   transform: SlowTransform(),
   itemBuilder: pageViewItem,
)

如何基于此实现自己的效果

  • 页面中对其child做动画 使用如下构造方法基于index,aniValue实现

    PageViewJ.aniBuilder(
      aniItemBuilder: (BuildContext context, int index, double page, double aniValue) {
      },
    ),
    
  • 对整个页面做动画

    PageViewJ(
      transform: 继承PageTransTorm自己实现页面动画,
      itemBuilder: 具体页面,
    ),
    
    ==================================
    abstract class PageTransform {
      Modifier? modifier;
      PageTransform();
      ///
      ///  if (page == index) {
      ///     /// 静止状态
      ///   } else if (page > index) {
      ///     
      ///   } else {
      ///     
      ///   }
      Widget transform(int index, double page, double aniValue, Widget child);
    }