FadeTransition () widget er animert bare én gang i flagre?

stemmer
0
class pin extends StatefulWidget {
@override
_PinState createState() => _PinState();
}

class _PinState extends State<pin> with TickerProviderStateMixin {
AnimationController _controller;
Animation<double> _animation;
bool error = false;


@override
void initState() {
  super.initState();
  this._controller = AnimationController(
      duration: const Duration(milliseconds: 1000), vsync: this);
  this._animation =
      Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
    parent: _controller,
    curve: Curves.easeIn,
  ));
}

@override
Widget build(BuildContext context) {
  if(this.error) {
    this.error = false;
    _controller.forward();
  }
  return Container(
    child: if (this.error)
            Container(
            child: FadeTransition(
              opacity: _animation,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Image.asset(assets/images/sad_face.png),
                  ),
                ],
              ),
            ),
          ),    
  ),
}
}

I koden ovenfor FadeTransition()widget er animert når programmet startes for første gang. og synligheten av FadeTransition()veksles ved den errorvariable. men når neste gang FadeTransition()widget er synlig det er ikke animert?

hva som mangler, når veksling FadeTransition()widgeten skal animeres hver gang det vises!

Publisert på 02/12/2019 klokken 23:51
kilden bruker
På andre språk...                            


1 svar

stemmer
1

En ting jeg la merke til er erroralltid falsk. Det er ingen kode for å slå den til sann og det er to steder hvor det vil bli satt til false. En av dem er avhengig av om det er sant (som det vil aldri være siden error = truefinnes ikke)

Når det er sagt, hvis du ønsker å gjøre din animasjon løpe igjen, hvor enn du er veksling denne egenskapen (vanligvis i en knapp onTapmetode) du må ringe setState. I setState kan du enten bruke

controller.forward(from: 0);
// or
controller.reset(); // stops the animation if in progress
controller.forward();
Svarte 03/12/2019 kl. 01:01
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more