【发布时间】:2018-04-10 01:58:02
【问题描述】:
我有一个时间显示应用程序,每次时间更改时都会更改时间。我真的很想知道如何为数字添加“文本翻转”动画。当应用程序启动时,数字立即翻转到位,但每次发生变化时都无法翻转。这是我的代码:
/// Flutter Packages
import 'package:flutter/animation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:redux/redux.dart';
class ListTimeWidget extends StatefulWidget { ... }
class _ListTimeWidgetState extends State<ListTimeWidget> with SingleTickerProviderStateMixin {
Animation<double> _animation;
AnimationController _controller;
/// Methods
String _selectCorrectTime(Store<DateTime> store) {
Map<String, int> timeDelta = {
'years': store.state.year,
'months': store.state.month,
'days': store.state.day,
'hours': store.state.hour,
'minutes': store.state.minute,
};
if (timeDelta.containsKey(widget.timeUnit))
return timeDelta[widget.timeUnit].toString().padLeft(2, '0');
else
return '##';
}
/// Widgets
@override
void initState() {
super.initState();
this._controller = new AnimationController(
vsync: this,
duration: const Duration(seconds: 1),
);
this._animation = new Tween(
begin: 0.0,
end: 1.0,
).animate(this._controller);
}
@override
Widget build(BuildContext context) {
return new AnimatedBuilder(
animation: this._animation,
builder: (BuildContext context, Widget child) {
final Matrix4 transform = new Matrix4.identity()
..scale(1.0, this._animation.value, 1.0);
return new Transform(
transform: transform,
alignment: FractionalOffset.center,
child: child,
);
},
child: new StoreConnector<DateTime, String>(
converter: (store) => this._selectCorrectTime(store),
builder: (context, time) {
this._controller.forward();
return new Text(
time,
textAlign: TextAlign.left,
style: new TextStyle(fontSize: 100.0),
);
},
)
);
}
@override
void dispose() {
this._controller.dispose();
super.dispose();
}
}
我得到的结果是一开始的动画,当数字从屏幕外重新出现时,而不是在时间改变时:
我是 Flutter 动画的新手,任何建议都会有所帮助。
【问题讨论】:
-
您是否尝试在您的状态上设置一个 bool 属性,当新状态发生时变为 true?
-
当一个新状态发生时,构建器被调用(我添加了一些 print() 语句并看到了一些结果)