简体   繁体   English

Flutter:AnimationController.stop() 在 AnimationController.dispose() 之后调用 AnimationController 方法不应在调用 dispose 之后使用。)

[英]Flutter : AnimationController.stop() called after AnimationController.dispose() AnimationController methods should not be used after calling dispose.)

while animation was running i would like to go back to next page or previous page... but this error shows up saying "AnimationController.stop() called after AnimationController.dispose() AnimationController methods should not be used after calling dispose."当 animation 正在运行时,我想将 go 返回到下一页或上一页......但此错误显示为“AnimationController.stop() 在 AnimationController.dispose() 之后调用 AnimationController 方法在调用 dispose 后不应使用。”

Please help me...请帮我...

          import 'package:flutter/material.dart';
          import 'package:flutter_screenutil/flutter_screenutil.dart';
          import 'package:get/get.dart';
          import 'package:sanduk/utils/app_colors.dart';
          import 'package:sanduk/utils/text_widget.dart';
          import 'dart:math' as math;

          class QuizSearchingPlayers extends StatefulWidget {
            const QuizSearchingPlayers({Key? key}) : super(key: key);

            @override
            _QuizSearchingPlayersState createState() => _QuizSearchingPlayersState();
          }

          class _QuizSearchingPlayersState extends State<QuizSearchingPlayers>
              with SingleTickerProviderStateMixin {
            late AnimationController _controller;

            @override
            void initState() {
              super.initState();
              _controller = AnimationController(
                duration: const Duration(seconds: 2),
                vsync: this,
              )..repeat();

              _controller.addListener(() async {
                await stoppingAnimation();
              });
            }

            Future stoppingAnimation() async {
              await Future.delayed(const Duration(seconds: 10));
              _controller.reset();
              _controller.stop();
              return true;
            }

            @override
            void dispose() {
                _controller.dispose();
              super.dispose();
              
            
            }

            @override
            Widget build(BuildContext context) {
              return SafeArea(
                child: Scaffold(
                  backgroundColor: AppColors.darkThemeBackground,
                  body: Container(
                    height: Get.height,
                    width: Get.width,
                    padding: EdgeInsets.all(20.h),
                    child: Column(
                      children: [
                        TextWidget(
                          "BIOLOGY QUIZ",
                          styles: TextStyles.size18_500,
                          color: AppColors.white,
                        ),
                        Container(
                          padding: EdgeInsets.symmetric(vertical: 5, horizontal: 10.w),
                          child: CircleAvatar(
                            radius: 150.r,
                            backgroundColor: AppColors.transparent,
                            child: AnimatedBuilder(
                              animation: _controller,
                              child: Padding(
                                padding: const EdgeInsets.all(8.0),
                                child: Stack(
                                  children: [
                                    Align(
                                      alignment: Alignment.center,
                                      child: CircleAvatar(
                                        radius: 120.r,
                                        backgroundColor: AppColors.blue,
                                        child: CircleAvatar(
                                          radius: 115.r,
                                          backgroundColor: AppColors.darkThemeBackground,
                                        ),
                                      ),
                                    ),
                                    Align(
                                      alignment: Alignment.centerLeft,
                                      child: CircleAvatar(
                                          radius: 40.r,
                                          backgroundColor: AppColors.red,
                                          backgroundImage: const AssetImage(
                                              "assets/images/sardar.png")),
                                    ),
                                    Align(
                                        alignment: Alignment.centerRight,
                                        child: CircleAvatar(
                                          radius: 40.r,
                                          backgroundColor: AppColors.darkBlue,
                                          backgroundImage: const AssetImage(
                                              "assets/images/sardar.png"),
                                        )),
                                  ],
                                ),
                              ),
                              builder: (context, child) {
                                return Transform.rotate(
                                  angle: _controller.value * 2 * math.pi,
                                  child: child,
                                );
                              },
                            ),
                          ),
                        ),
                        TextWidget(
                          "Searching For Opponent..",
                          styles: TextStyles.size32_400,
                          color: AppColors.blue,
                          maxLines: 2,
                        ),
                      ],
                    ),
                  ),
                ),
              );
            }
          }

Everything were working good till i navigate back to otherscreen.... and when i print some line inside my stoppingAnimation() method it keeps printing forever how do i stop that?一切正常,直到我导航回其他屏幕......当我在我的停止动画()方法中打印一些行时,它会一直打印我如何停止它?

Solved by keeping my stoppingAnimation method outside of addlistener method通过将我的stoppingAnimation动画方法保留在addlistener方法之外来解决

           @override
          void initState() {
            super.initState();
            _controller = AnimationController(
              duration: const Duration(seconds: 2),
              vsync: this,
            )..repeat();

            _controller.addListener(() {
              if (_controller.status == AnimationStatus.dismissed) {
                setState(() {
                  opponentFound = true;
                  _quizAnimationController.countDownTogetReady();
                });
              }
            });

            stoppingAnimation();
          }

          Future stoppingAnimation() async {
            await Future.delayed(const Duration(seconds: 5));
            _controller.reset();
            _controller.stop();
          }

          @override
          void dispose() {
            _controller.dispose();
            super.dispose();
          }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM