Dart 如何公开StatefulWidget的方法?
假设我想构建一个名为MySlideWidget的StatefulWidget,它提供一个公共实例方法:animate 当我按下MySlideWidget父级上的按钮时,我可以调用MySlideWidget的animate方法来触发MySlideWidget的内部幻灯片转换 用法如下所示:Dart 如何公开StatefulWidget的方法?,dart,flutter,Dart,Flutter,假设我想构建一个名为MySlideWidget的StatefulWidget,它提供一个公共实例方法:animate 当我按下MySlideWidget父级上的按钮时,我可以调用MySlideWidget的animate方法来触发MySlideWidget的内部幻灯片转换 用法如下所示: class MySlideWidgetDemo extends StatelessWidget { @override Widget build(BuildContext context) {
class MySlideWidgetDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
MySlideWidget mySlideWidget = new MySlideWidget();
return new Scaffold(
body: mySlideWidget,
floatingActionButton: new FloatingActionButton(
onPressed: () {
mySlideWidget.animate();
},
tooltip: 'Start',
child: new Icon(Icons.add),
));
}
}
我想知道的是如何在MySlideWidget中封装AnimationController和_controller.forward的实现,这样MySlideWidget的用户就可以简单地调用animate了
这可能吗?或者,在flifter中进行封装的理想方法是什么?您应该使用并将其传递给SlideTransition。然后在需要时呼叫controller.forward
以下是示例:
class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
AnimationController _controller;
Animation<FractionalOffset> _slideTransitionPosition;
@override
initState() {
super.initState();
_controller = new AnimationController(
vsync: this,
duration: const Duration(milliseconds: 2000),
);
_slideTransitionPosition = new FractionalOffsetTween(
begin: const FractionalOffset(0.0, -1.0),
end: const FractionalOffset(0.0, 10.0),
).animate(new CurvedAnimation(
parent: _controller,
curve: Curves.fastOutSlowIn,
));
}
void _onPress() {
_controller.forward();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Container(
child: new SlideTransition(
position: _slideTransitionPosition,
child: new Container(
color: Colors.red,
width: 100.0,
height: 100.0,
),
),
),
floatingActionButton: new FloatingActionButton(
onPressed: _onPress,
tooltip: 'Start',
child: new Icon(Icons.add),
),
);
}
}
你也可以在中找到例子谢谢你的回复,我已经更新了我的问题,以便更准确地描述。简单地说,我想知道如何将动画实现封装在StatefulWidget中。我明白了。在这种情况下,可以将其用作Form和FormState的参考实现。StatefulWidget及其状态公开了方法save。所以你们需要得到正确的状态实例并在那个里触发动画。