Closed xinpiaoyuanfang closed 4 years ago
页面结束对timer取消的逻辑不能在view里处理呢,应该怎么去实现呢
伪代码
方案1: 不额外保持Timer变量
void _onInit(Action action, Context<T> ctx) {
const timeout = Duration(seconds: 3);
final timer = Timer(timeout, () {
/// your run loop
});
/// 在组件销毁时,退出
ctx.registerOnDisposed(() {
timer.cancel();
});
}
方案2: 通过LocalProps保持Timer变量, 方便需要的时候获取 注:将Timer保存在State中也是可以的,但是冲状态层来看,不纯粹。
class MyLocalProps extends LocalProps<MyLocalProps> {
Timer timer;
MyLocalProps(Context<Object> ctx) : super(ctx);
factory MyLocalProps.of(ExtraData ctx) {
return LocalProps.provide((_) => MyLocalProps(_)).of(ctx);
}
@override
void destructor(Context<Object> ctx) {
timer?.cancel();
}
}
void _onInit(Action action, Context<T> ctx) {
const timeout = Duration(seconds: 3);
ComponentLocalProps.of(ctx).timer = Timer(timeout, () {
/// your run loop
});
/// 在改组件的任意的effect,或者View中,都可以获取到ComponentLocalProps.of(ctx).timer 执行操作
}
怎么实现 Timer 功能, 时间更新后需要在页面上显示, setState这个用 didUpdateWidget调用的时候怎么调进去。 原生代码:
view.dart
effect.dart
不知道怎么实现了,reducer里面我试各种赋值,都赋不过来