我在欢迎屏幕中实现了延迟动画,但在我的 flutter 应用程序中出现以下错误。如果我的代码中有错误,请告诉我,我可以纠正并解决此问题。
错误是:
E/flutter (11565): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)]
Unhandled Exception:
'package:flutter/src/animation/animation_controller.dart': Failed
assertion: line 455 pos 7: '_ticker != null':
AnimationController.forward() called after
AnimationController.dispose()
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
E/flutter (11565): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)]
Unhandled Exception:
'package:flutter/src/animation/animation_controller.dart': Failed
assertion: line 455 pos 7: '_ticker != null':
AnimationController.forward() called after
AnimationController.dispose()
Run Code Online (Sandbox Code Playgroud)
当您使用Timer或Future.delayed与AnimationController. 这就是问题。可以这么说delay = 1000。
下面的代码告诉 flutter,在 1000 毫秒内,调用forward()你的DelayedAnimation小部件中的动画控制器
Timer(Duration(milliseconds: widget.delay), () {
_controller.forward();
});
Run Code Online (Sandbox Code Playgroud)
但是,在此之前,您的DelayedAnimation小部件已被释放(例如,如果用户移动到不同的屏幕,则会发生这种情况)
这意味着当Timer执行时,它正在调用forward()一个已被处理的控制器(因为DelayedAnimation已被处理)
有几种解决方案。
mounted在调用前检查属性:Timer(
Duration(
milliseconds: widget.delay
),
() {
if(mounted) {
_controller.forward();
}
}
);
Run Code Online (Sandbox Code Playgroud)
或 2. 创建 Timer 时存储它:
_timer = Timer(
Duration(
milliseconds: widget.delay
),
() {
_controller.forward();
}
);
Run Code Online (Sandbox Code Playgroud)
然后在处置时取消它:
@override
void dispose() {
super.dispose();
_controller.dispose();
_timer?.cancel();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3833 次 |
| 最近记录: |