[英]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.