【问题标题】:An infinite Horizontal Flip animation ImageWidget Flutter一个无限的水平翻转动画 ImageWidget Flutter
【发布时间】:2021-07-17 12:13:30
【问题描述】:

我的问题其实和上一个话题(Link)类似,我测试过,但是不行……

我想实现一个带有无限水平翻转动画的简单屏幕;自从加载我的窗口以来,我想要一个使用以下代码进行无限水平旋转的图像:

import 'dart:math';
import 'package:flip_card/flip_card.dart';
import 'package:flutter/material.dart';

class FlipCardPage extends StatefulWidget {
@override
_FlipCardPageState createState() => _FlipCardPageState();
}
class _FlipCardPageState extends State<FlipCardPage>
with SingleTickerProviderStateMixin {

AnimationController animationController;
@override
void initState() {
super.initState();
animationController = new AnimationController(
  vsync: this,
  duration: new Duration(seconds: 7),
);

animationController.repeat();
}

@override
 Widget build(BuildContext context) {
return   AnimatedBuilder(
    animation: animationController,
    builder: (context, child){
      return Transform(
        transform: Matrix4.rotationY((1 - animationController.value ) * pi / 2),
        child: FlipCard(
          direction: FlipDirection.HORIZONTAL, // default
          front: Container(
            decoration: BoxDecoration(
              image: DecorationImage(
                image: AssetImage("pictures/css.png"),
                fit: BoxFit.scaleDown,
              ),
              shape: BoxShape.rectangle,
            ),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[],
            ),
          ),
          back: Container(
            decoration: BoxDecoration(
              image: DecorationImage(
                image: AssetImage("pictures/css.png"),
                fit: BoxFit.scaleDown,
              ),
              shape: BoxShape.rectangle,
            ),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[],
            ),
          ),
        ),
      );
    }
 );
// _controller.forward();
// _controller.reverse();
}
}

我执行了上面的代码,但什么也没得到(...只是一个白屏:/)

有什么建议可以解决吗? 提前谢谢你

【问题讨论】:

    标签: flutter transform flip card animationcontroller


    【解决方案1】:

    另外,我尝试了另一个代码:

    import 'dart:math';
    import 'package:flutter/material.dart';
    class FlipCardPage2 extends StatefulWidget {
     @override
     _FlipCardPage2State createState() => _FlipCardPage2State();
    }
    class _FlipCardPage2State extends State<FlipCardPage2> {
    @override
    Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flip Animation'),
      ),
      body: Container(
        width: double.infinity,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            FlipCard(),
          ],
        ),
      ),
    );
    }
    }
    class FlipCard extends StatefulWidget {
    @override
    _FlipCardState createState() => _FlipCardState();
    }
    class _FlipCardState extends State<FlipCard>
    with SingleTickerProviderStateMixin {
    AnimationController animationController;
    bool _isFront = true;
    @override
    void initState() {
    super.initState();
    animationController = new AnimationController(
    
      vsync: this,
      duration: new Duration(seconds: 4),
    );
    
    // print("Inside initState!");
    animationController.addListener(() {
      setState(() {
        if (animationController.status == AnimationStatus.completed) {
        //  print("Status: completed");
          animationController.repeat();
        //  print("After repeat");
          setState(() {
            _isFront = !_isFront;
          });
      
        }
        else if (animationController.status == AnimationStatus.dismissed){
         // print("Status: dismisses");
          animationController.forward();
          setState(() {
            _isFront = !_isFront;
          });
        }
       });
      });
    
        animationController.forward();
    
      }
      Widget _frontCard() {
      return Container(
      key: ValueKey(true),
      color: Colors.orangeAccent,
      width: 200,
      height: 200,
      child: Center(
          child: Text(
            'Front',
            style: TextStyle(color: Colors.white, fontSize: 48),
          )),
      );
     }
     Widget _rearCard() {
     return Container(
      key: ValueKey(false),
      color: Colors.orange,
      width: 200,
      height: 200,
      child: Center(
          child: Text(
            'Rear',
            style: TextStyle(color: Colors.white, fontSize: 48),
          )),
     );
     }
     @override
      Widget build(BuildContext context) {
     return AnimatedSwitcher(
      child: _isFront ? _frontCard() : _rearCard(),
      duration: Duration(seconds: 1),
      transitionBuilder: (Widget child, Animation<double> animation) {
        final rotate = Tween(begin: pi, end: 0.0).animate(animation);
        return AnimatedBuilder(
            animation: rotate,
            child: child,
            builder: (BuildContext context, Widget child) {
              final angle = (ValueKey(_isFront) != widget.key)
                  ? min(rotate.value, pi / 2)
                  : rotate.value;
              return Transform(
                transform: Matrix4.rotationY(angle),
                child: child,
                alignment: Alignment.center,
              );
            });
      },
      switchInCurve: Curves.easeInCubic,
      switchOutCurve: Curves.easeOutCubic,
      );
      }
      }
    

    当我执行这段代码时,动画会开始一次并且朝一个方向开始......它没有循环运行......

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 1970-01-01
      相关资源
      最近更新 更多