【发布时间】:2021-11-28 03:38:41
【问题描述】:
在动画运行时,我想返回下一页或上一页...但此错误显示为“AnimationController.stop() 在 AnimationController.dispose() 之后调用 AnimationController 方法在调用 dispose 后不应使用。”
请帮帮我...
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,
),
],
),
),
),
);
}
}
在我导航回其他屏幕之前,一切都运行良好......当我在我的 stopAnimation() 方法中打印一些行时,它会一直打印我如何停止它?
【问题讨论】:
-
通过将我的停止动画方法置于 addlistener 方法之外来解决 [code] @override void initState() { super.initState(); _controller = AnimationController(duration: const Duration(seconds: 2), vsync: this, )..repeat(); _controller.addListener(() { });停止动画(); } 未来停止动画()异步 { 等待 Future.delayed(const Duration(seconds: 5)); // 忽略:avoid_print print(_controller.status); _controller.reset(); _controller.stop();返回真; }
-
你可以在答案部分写下来
-
谢谢@YeasinSheikh
标签: c# flutter animation dispose animationcontroller