大佬教程收集整理的这篇文章主要介绍了dart – Flutter Nested Widget Callback / Async Questions,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import 'package:Flutter/foundation.dart'; import 'package:Flutter/material.dart'; void main() { runApp(new MaterialApp( home: new Container(color: Colors.white,child: new RootWidget()))); } class RootWidget extends StatelessWidget { FlipWidget mainFlipWidget; @override Widget build(BuildContext context) { mainFlipWidget = new FlipWidget( frontWidget: frontWidget,BACkWidget: new BACkWidget( onPressedButton: () { _flipMainButton(); },),); return new Center(child:mainFlipWidget); } _flipMainButton() { mainFlipWidget.doTheFlip(); } } class BACkWidget extends StatefulWidget { BACkWidget({ this.onPressedButton,}); final VoidCallBACk onPressedButton; Widget buttonFlipWidget; _BACkWidgetState createState() => new _BACkWidgetState(); } class _BACkWidgetState extends State<BACkWidget> { @override Widget build(BuildContext context) { widget.buttonFlipWidget = new Container( height: 180.0,color: Colors.greY[200],child:new FlatButton( onPressed: () { triggerCb(); },child: new Text('Press me'),); return widget.buttonFlipWidget; } triggerCb() { widget.onPressedButton(); } } class FlipWidget extends StatefulWidget { FlipWidget({ @required this.frontWidget,@required this.BACkWidget,}); final Widget frontWidget; final Widget BACkWidget; final _FlipWidgetState _state = new _FlipWidgetState(); doTheFlip () { _state.doTheFlip(); } _FlipWidgetState createState() => _state; } class _FlipWidgetState extends State<FlipWidget> with TickerProviderStatemixin { AnimationController _controller; Animation<double> _frontScale; Animation<double> _BACkScale; void initState() { super.initState(); _controller = new AnimationController(vsync: this,duration: const Duration(milliseconds: 1500),); _frontScale = new Tween( begin: 1.0,end: 0.0,).animate(new CurvedAnimation(parent: _controller,curve: new Interval(0.0,0.5,curve: Curves.easeIn),)); _BACkScale = new CurvedAnimation( parent: _controller,curve: new Interval(0.5,1.0,curve: Curves.eaSEOut),); } @override Widget build(BuildContext context) { // ThemeData theme = Theme.of(context); return new Scaffold( body: new Center( child: new Stack( children: [ new AnimatedBuilder( child: widget.frontWidget,animation: _BACkScale,builder: (BuildContext context,Widget child) { final Matrix4 transform = new Matrix4.identity() ..scale(_BACkScale.value,1.0); return new Transform( transform: transform,alignment: FractionalOffset.center,child: child,); },new AnimatedBuilder( child: widget.BACkWidget,animation: _frontScale,Widget child) { final Matrix4 transform = new Matrix4.identity() ..scale(_frontScale.value,1.0); return new Transform( transform: transform,); } ),],); } doTheFlip() { setState(() { if (_controller.isCompleted || _controller.veLocity > 0) _controller.reverse(); else _controller.forWARD(); }); } } final Widget frontWidget = new Container( color: Colors.white,height: 180.0,child: new column( children: [ new Text("Front Side of the card") ],);
> RootWidget应该是有状态的.将翻转状态存储在那里.
> BACkWidget应该是无状态的.它所要做的就是通知RootWidget按下按钮.
> FlipWidget应检测使用didupdateWidget翻转的更改.
>不要将状态存储到Widget的成员变量中,并且如果可以避免,请避免将mutator方法放在State上…这通常表明您需要将状态存储在窗口小部件树中并通过它与构造函数参数.
在Widget Framework Tour和interactivity tutorial中了解有关StatefulWidget和StatelessWidget的更多信息.
@L_403_4@
import 'package:Flutter/foundation.dart'; import 'package:Flutter/material.dart'; void main() { runApp(new MaterialApp( home: new Container( color: Colors.white,child: new RootWidget(),)); } class RootWidget extends StatefulWidget { @override _RootWidgetState createState() => new _RootWidgetState(); } class _RootWidgetState extends State<RootWidget> { bool _flipped = false; @override Widget build(BuildContext context) { return new Center( child: new FlipWidget( flipped: _flipped,frontWidget: new Container( color: Colors.white,child: new column( children: [ new Text("Front Side of the card") ],BACkWidget: new BACkWidget( onPressedButton: () { setState(() { _flipped = !_flipped; }); },); } } class BACkWidget extends StatelessWidget { BACkWidget({ this.onPressedButton,}); final VoidCallBACk onPressedButton; @override Widget build(BuildContext context) { return new Container( height: 180.0,child:new FlatButton( onPressed: onPressedButton,); } } class FlipWidget extends StatefulWidget { FlipWidget({ @required this.frontWidget,@required this.flipped,}); final Widget frontWidget; final Widget BACkWidget; final bool flipped; @override _FlipWidgetState createState() => new _FlipWidgetState(); } class _FlipWidgetState extends State<FlipWidget> with TickerProviderStatemixin { AnimationController _controller; Animation<double> _frontScale; Animation<double> _BACkScale; @override void initState() { super.initState(); _controller = new AnimationController( vsync: this,duration: const Duration(milliseconds: 1500) )..value = widget.flipped ? 1.0 : 0.0; _frontScale = new Tween( begin: 1.0,); } @override void didupdateWidget(FlipWidget oldWidget) { if (widget.flipped != oldWidget.flipped) { if (widget.flipped) { _controller.forWARD(); } else { _controller.reverse(); } } super.didupdateWidget(oldWidget); } @override Widget build(BuildContext context) { return new Scaffold( body: new Center( child: new Stack( children: [ new AnimatedBuilder( child: widget.frontWidget,); } }
以上是大佬教程为你收集整理的dart – Flutter Nested Widget Callback / Async Questions全部内容,希望文章能够帮你解决dart – Flutter Nested Widget Callback / Async Questions所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。