gpt4 book ai didi

flutter - 我如何确保即使在另一条 route 也会调用 AnimationController?

转载 作者:IT王子 更新时间:2023-10-29 06:56:05 26 4
gpt4 key购买 nike

我目前有这段代码,它工作得很好。

它控制一个计时器,当它达到零时,它将改变模式,从EATING -> FASTING -> READY
但是,如果用户转到另一条路线(使用 Navigator.push),模式将不会切换,直到用户返回带有计时器的页面。解决此问题的最佳方法是什么?

controller = AnimationController(vsync: this, duration: Duration(seconds: 10));
//...

最佳答案

这里的问题是标准的 TickerProvider,即 State 混合宏,您可能正在使用 with SingleTickerProviderStateMixin 混合它.

当您在另一条 route 时,该行情提供者实际上执行了一项非常重要的操作,即静音行情。
话虽如此,您显然想避免这种行为,这可以通过创建自己的 TickerProvider 来实现,类似于 TestVSync 的方式。可以。

为此,我创建了一个简单的 mixin称为 NonStopTickerProviderMixin:

import 'package:flutter/scheduler.dart';

mixin NonStopTickerProviderMixin implements TickerProvider {
@override
Ticker createTicker(TickerCallback onTick) => Ticker(onTick);
}

如果你想使用它,将 with NonStopTickerProviderMixin 添加到你的 State 而不是 SingleTickerProviderStateMixin 就可以了。

完整的工作代码 as a Gist .

注意事项

将我创建的类作为 mixin 并没有什么意义。它实际上应该是 class 并且它与 with 关键字一起工作得很好,但是,我希望它能替代 (Single)TickerProviderStateMixin。 .
用于 State 的原始代码提供程序实现是 mixin 的原因很简单,因为它使用了 didChangeDependenciesdispose 来自 State 的方法,首先,执行 Ticker 的静音,其次,添加一些安全断言。
如果你想添加它们,你可以从我链接的源代码中复制它们并将 on State 添加到你的 mixin (但不要添加 muting 部分,因为这正是您要避免的部分)。

关于flutter - 我如何确保即使在另一条 route 也会调用 AnimationController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com