Flutter 颤振动画生成器错误

Flutter 颤振动画生成器错误,flutter,flutter-animation,Flutter,Flutter Animation,以下示例代码执行了意外操作: import'package:characters/characters.dart'; 进口“包装:颤振/材料.省道”; void main(){ runApp(MyApp()); } 类MyApp扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回材料PP( 标题:“颤振演示”, 主题:主题数据( 主样本:颜色。蓝色, 视觉密度:视觉密度。自适应平台密度, ), 主页:MyHomePage(), ); } } 类MyHomePage扩展StatefulW

以下示例代码执行了意外操作:

import'package:characters/characters.dart';
进口“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
constmyhomepage({Key}):超级(Key:Key);
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
int _计数器=0;
void _incrementCounter(){
打印(“***\u MyHomePageState:\u incrementCounter-${this.hashCode}”);
设置状态(){
_计数器++;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“动画文本工具包第168期”),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
动画文本工具包(
动画文本:TypeWriter或动画文本(
“动画文本”,
textStyle:const textStyle(
字体大小:45.0,
fontWeight:fontWeight.w900,
颜色:颜色。粉红色,
),
),
),
常量文本(
“您已经按了这么多次按钮:”,
),
正文(
“$”计数器“,
风格:Theme.of(context).textTheme.headline4,
),
],
),
),
浮动操作按钮:浮动操作按钮(
按下时:\ u递增计数器,
工具提示:“增量”,
子:常量图标(Icons.add),
),
);
}
}
///显示[文本]元素的动画文本,就好像它是被键入的一样
///一次一个角色。
类TypewriterAnimatedText{
///[文本]小部件的文本。
最终字符串文本;
///[Text]小部件的[TextStyle]属性。
最终文本样式文本样式;
///每个字符出现之间的延迟[持续时间]
///
///默认情况下,它设置为30毫秒。
最终持续时间速度;
///动画控制器的持续时间。
最后期限;
///与[文本]相同,但与[字符]相同。
///
///需要使用字符长度,而不是字符串长度来支持
///Unicode和表情符号。
最后字符文本字符;
打字机动态文本(
这个文本{
@需要此.textStyle,
this.speed=常数持续时间(毫秒:30),
}):assert(null!=速度),
textCharacters=text.characters,
持续时间=速度*(text.characters.length);
动画_typewriterText;
void initAnimation(AnimationController控制器){
打印('>>>TypewriterAnimatedText:initAnimation-${this.hashCode}');
_typewriterText=StepTween(
开始:0,
结束:textCharacters.length,
).制作动画(控制器);
}
///显示部分文本的小部件
小部件animatedBuilder(构建上下文,小部件子项){
打印('>>>TypewriterAnimatedText:animatedBuilder-${this.hashCode}');
最终typewriterValue=\u typewriterText.value;
final visibleString='${textCharacters.take(typewriterValue)}};
返回文本(visibleString,样式:textStyle);
}
}
///动画文本小部件的基类。
类AnimatedTextKit扩展StatefulWidget{
///文本动画。
最终打字机动画文本动画文本;
常量动画文本工具包({
关键点,
@需要此.animatedText,
}):super(key:key);
///创建此小部件的可变状态。请参阅[StatefulWidget.createState]。
@凌驾
_AnimatedTextKitState createState()=>_AnimatedTextKitState();
}
类_AnimatedTextKitState扩展状态
使用TickerProviderStateMixin{
动画控制器_控制器;
@凌驾
void initState(){
打印('^^^_AnimatedTextKitState:initState-${this.hashCode}');
super.initState();
最终animatedText=widget.animatedText;
_控制器=动画控制器(
持续时间:animatedText.duration,
vsync:这个,,
);
animatedText.initAnimation(_控制器);
_controller.repeat();
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
打印('^^_AnimatedTextKitState:build-${this.hashCode}');
返回动画生成器(
动画:_控制器,
生成器:widget.animatedText.animatedBuilder,
);
}
}
运行它并单击浮动操作按钮以增加计数器,输出将如下所示:

I/flutter (29275):  ^^^ _AnimatedTextKitState:initState - 171683441
I/flutter (29275):  >>> TypewriterAnimatedText:initAnimation - 936400533
I/flutter (29275):  ^^^ _AnimatedTextKitState:build - 171683441
I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 936400533
I/chatty  (29275): uid=10133(com.example.atk168) 1.ui identical 2 lines
I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 936400533
I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 936400533
I/chatty  (29275): uid=10133(com.example.atk168) 1.ui identical 60 lines
I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 936400533
I/flutter (29275):  *** _MyHomePageState:_incrementCounter - 220007591
I/flutter (29275):  ^^^ _AnimatedTextKitState:build - 171683441
I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 280798896
I/flutter (29275): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (29275): The following NoSuchMethodError was thrown building AnimatedBuilder(animation:
I/flutter (29275): AnimationController#41b74(▶ 0.633), dirty, state: _AnimatedState#db314):
I/flutter (29275): The getter 'value' was called on null.
I/flutter (29275): Receiver: null
I/flutter (29275): Tried calling: value
I/flutter (29275): 
I/flutter (29275): The relevant error-causing widget was:
I/flutter (29275):   AnimatedBuilder file:///Users/anthony/github/awhitford/atk168/lib/main.dart:173:12
I/flutter (29275): 
I/flutter (29275): When the exception was thrown, this was the stack:
I/flutter (29275): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
I/flutter (29275): #1      TypewriterAnimatedText.animatedBuilder (package:atk168/main.dart:121:45)
I/flutter (29275): #2      AnimatedBuilder.build (package:flutter/src/widgets/transitions.dart:1528:19)
I/flutter (29275): #3      _AnimatedState.build (package:flutter/src/widgets/transitions.dart:179:48)
I/flutter (29275): #4      StatefulElement.build (package:flutter/src/widgets/framework.dart:4825:27)
I/flutter (29275): #5      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4708:15)
I/flutter (29275): #6      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4880:11)
I/flutter (29275): #7      BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #8      Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #9      StatefulElement.update (package:flutter/src/widgets/framework.dart:4912:5)
I/flutter (29275): #10     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #11     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #12     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4880:11)
I/flutter (29275): #13     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #15     StatefulElement.update (package:flutter/src/widgets/framework.dart:4912:5)
I/flutter (29275): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #17     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5727:32)
I/flutter (29275): #18     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6327:17)
I/flutter (29275): #19     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #20     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6205:14)
I/flutter (29275): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #22     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #23     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #24     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #25     StatelessElement.update (package:flutter/src/widgets/framework.dart:4789:5)
I/flutter (29275): #26     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #27     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #28     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #29     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #30     ProxyElement.update (package:flutter/src/widgets/framework.dart:5066:5)
I/flutter (29275): #31     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #32     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #33     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #34     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #35     ProxyElement.update (package:flutter/src/widgets/framework.dart:5066:5)
I/flutter (29275): #36     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #37     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5727:32)
I/flutter (29275): #38     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6327:17)
I/flutter (29275): #39     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #40     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #41     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4880:11)
I/flutter (29275): #42     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #43     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #44     StatefulElement.update (package:flutter/src/widgets/framework.dart:4912:5)
I/flutter (29275): #45     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #46     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #47     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #48     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #49     ProxyElement.update (package:flutter/src/widgets/framework.dart:5066:5)
I/flutter (29275): #50     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #51     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #52     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4880:11)
I/flutter (29275): #53     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #54     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #55     StatefulElement.update (package:flutter/src/widgets/framework.dart:4912:5)
I/flutter (29275): #56     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #57     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6205:14)
I/flutter (29275): #58     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #59     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #60     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #61     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #62     StatelessElement.update (package:flutter/src/widgets/framework.dart:4789:5)
I/flutter (29275): #63     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #64     SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6205:14)
I/flutter (29275): #65     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #66     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #67     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4880:11)
I/flutter (29275): #68     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #69     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #70     StatefulElement.update (package:flutter/src/widgets/framework.dart:4912:5)
I/flutter (29275): #71     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #72     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #73     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4880:11)
I/flutter (29275): #74     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #75     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #76     StatefulElement.update (package:flutter/src/widgets/framework.dart:4912:5)
I/flutter (29275): #77     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #78     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #79     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #80     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #81     ProxyElement.update (package:flutter/src/widgets/framework.dart:5066:5)
I/flutter (29275): #82     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #83     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #84     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4880:11)
I/flutter (29275): #85     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #86     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #87     StatefulElement.update (package:flutter/src/widgets/framework.dart:4912:5)
I/flutter (29275): #88     Element.updateChild (package:flutter/src/widgets/framework.dart:3412:15)
I/flutter (29275): #89     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4733:16)
I/flutter (29275): #90     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4880:11)
I/flutter (29275): #91     BuildOwner._runWithCurrentBuildTarget (package:flutter/src/widgets/framework.dart:2708:15)
I/flutter (29275): #92     Element.rebuild (package:flutter/src/widgets/framework.dart:4407:12)
I/flutter (29275): #93     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2813:33)
I/flutter (29275): #94     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:899:21)
I/flutter (29275): #95     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:320:5)
I/flutter (29275): #96     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1119:15)
I/flutter (29275): #97     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1057:9)
I/flutter (29275): #98     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:973:5)
I/flutter (29275): #102    _invoke (dart:ui/hooks.dart:157:10)
I/flutter (29275): #103    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:253:5)
I/flutter (29275): #104    _drawFrame (dart:ui/hooks.dart:120:31)
I/flutter (29275): (elided 3 frames from dart:async)
I/flutter (29275): 
I/flutter (29275): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (29275): Another exception was thrown: A RenderFlex overflowed by 99320 pixels on the bottom.
I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 280798896
I/flutter (29275): Another exception was thrown: NoSuchMethodError: The getter 'value' was called on null.
I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 280798896

Application finished.
具体而言,请仔细观察以下内容:

I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 936400533
I/flutter (29275):  *** _MyHomePageState:_incrementCounter - 220007591
I/flutter (29275):  ^^^ _AnimatedTextKitState:build - 171683441
I/flutter (29275):  >>> TypewriterAnimatedText:animatedBuilder - 280798896
I/flutter (29275): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (29275): The following NoSuchMethodError was thrown building AnimatedBuilder(animation:
I/flutter (29275): AnimationController#41b74(▶ 0.633), dirty, state: _AnimatedState#db314):
I/flutter (29275): The getter 'value' was called on null.
I/flutter (29275): Receiver: null
I/flutter (29275): Tried calling: value
I/flutter (29275): 
I/flutter (29275): The relevant error-causing widget was:
I/flutter (29275):   AnimatedBuilder file:///Users/anthony/github/awhitford/atk168/lib/main.dart:173:12
I/flutter (29275): 
I/flutter (29275): When the exception was thrown, this was the stack:
I/flutter (29275): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
I/flutter (29275): #1      TypewriterAnimatedText.animatedBuilder (package:atk168/main.dart:121:45)
I/flutter (29275): #2      AnimatedBuilder.build (package:flutter/src/widgets/transitions.dart:1528:19)
I/flutter (29275): #3      _AnimatedState.build (package:flutter/src/widgets/transitions.dart:179:48)
我只有一个
TypewriterAnimatedText
声明。它正在生成已正确初始化的
TypeWriterInimatedText
936400533
,但单击按钮后,它开始生成一个尚未初始化的新实例(
280798896
),因此
\u typewriterText
为空,并对其调用
.value
,触发此问题

发生了什么?我希望
build
只在
initState
之后运行,但这里的情况似乎不是这样?(我是否发现了一个颤振Bug?)

这个问题有点难以复制。我收到了一些来自Windows用户的投诉,所以他们似乎能够很容易地重现这一点。就我自己而言,只有在切换到
dev
频道并在Android emulator上测试之后,我才能够在Mac上重现这一点。

“但在单击按钮后,它开始构建一个尚未初始化的新实例(280798896)”-这是因为您调用
setState(({u counter++})重建整个小部件树-它