Flutter flatter解析子树中共享同一标记的多个英雄

Flutter flatter解析子树中共享同一标记的多个英雄,flutter,Flutter,在我的移动应用程序的简单部分中,我使用了Hero,没有任何问题,而且效果很好。现在,当我尝试将一个名为AnimatedFab的类作为Widget添加到此类的一部分时,我得到以下错误: 在子树中有多个英雄共享同一标记 我没有在这个类中使用任何Hero,我想知道为什么会出现错误 我在Stack中使用了Hero,实现代码是: 定位( top:259.0, 左:6.0, 孩子:大小盒子( 键:_imageKey, 宽度:43.0, 身高:43.0, 子项:InkWell(onTap:(){ //...

在我的移动应用程序的简单部分中,我使用了
Hero
,没有任何问题,而且效果很好。现在,当我尝试将一个名为
AnimatedFab
的类作为
Widget
添加到此类的一部分时,我得到以下错误:

在子树中有多个英雄共享同一标记

我没有在这个类中使用任何
Hero
,我想知道为什么会出现错误

我在
Stack
中使用了
Hero
,实现代码是:

定位(
top:259.0,
左:6.0,
孩子:大小盒子(
键:_imageKey,
宽度:43.0,
身高:43.0,
子项:InkWell(onTap:(){
//...
},child:MyHero(hiveFeed:widget.hiveFeeds)),
)),
Stack
的父级中,上面的代码是它的一个子级,我有以下代码:

Positioned(top: 140.0, right: -40.0, child: const AnimatedFab().pl(8.0)),
完整的
堆栈
子项:

返回堆栈(
儿童:[
卡片(
子:堆栈(
儿童:[
已定位(顶部:140.0,右侧:-40.0,子级:const AnimatedFab().pl(8.0)),
],
),
),
定位(
top:259.0,
左:6.0,
孩子:大小盒子(
键:_imageKey,
宽度:43.0,
身高:43.0,
子项:InkWell(onTap:(){
//...
},child:MyHero(hiveFeed:widget.hiveFeeds)),
)),
],
);
更新 <> P>我认为HealTAG是下级的一个值:

AnimatedFab
我对以下代码有问题的类:


定位(顶部:140.0,右侧:-40.0,子级:AnimatedFab(键:_imageKey).pl(8.0)),
类AnimatedFab扩展StatefulWidget{
最后一次按下按钮;
最后一键(u键),;
const AnimatedFab({Key Key,this.onPressed}):\u Key=Key;
@凌驾
_AnimatedFabState createState()=>\u AnimatedFabState();
}
类_AnimatedFabState使用SingleTickerProviderStateMixin扩展状态{
AnimationController _AnimationController;
动画-彩色动画;
最终双膨胀尺寸=160.0;
最终双重密度=50.0;
@凌驾
void initState(){
super.initState();
_animationController=animationController(vsync:this,duration:const duration(毫秒:200));
_colorAnimation=ColorTween(开始:Colors.transparent,结束:Colors.pink[800])。动画(_animationController);
}
@凌驾
无效处置(){
_animationController.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回大小框(
宽度:expandedSize,
高度:扩展尺寸,
子对象:动画生成器(
动画:_animationController,
生成器:(BuildContext上下文,小部件子项){
返回堆栈(
对齐:对齐.center,
儿童:[
_buildFabCore(widget.key),
],
);
},
),
);
}
小部件构建选项(IconData图标,双角度){
if(_animationController.isdissed){
返回容器();
}
双iconSize=0.0;
如果(_animationController.value>0.8){
iconSize=26.0*(_animationController.value-0.8)*5;
}
返回Transform.rotate(
角度:角度,,
子对象:对齐(
对齐:alignment.topCenter,
孩子:填充(
填充:仅限常量边集(顶部:8.0),
孩子:我的钮扣(
onPressed:_onIconClick,
图标:Transform.rotate(
角度:-角度,
子:图标(
偶像
颜色:颜色。黑色54,
),
),
iconSize:iconSize,
对齐:对齐.center,
填充:常量边集全部(0.0),
),
),
),
);
}
小部件_buildExpandedBackground(){
最终双尺寸=hiddenSize+(expandedSize-hiddenSize)*\u animationController.value;
返回能力(
不透明度:_animationController.value,
持续时间:常量持续时间(毫秒:300),
孩子:卡片(
形状:RoundedRectangleBorder(borderRadius:borderRadius.circular(100.0)),
标高:4.0,
子:容器(
高度:尺寸,
宽度:大小,
),
),
);
}
Widget\u buildFabCore(Key){
最终双尺度因子=2*(_animationController.value-0.5).abs();
返回浮动操作按钮(
钥匙:钥匙,
标高:0.0,
米尼:是的,
按下按钮:_onFabTap,
backgroundColor:_colorAnimation.value,
孩子:变换(
对齐:对齐.center,
转换:Matrix4.identity()…缩放(1.0,scaleFactor),
子:图标(
_animationController.value>0.5?Icons.close:Icons.filter_列表,
颜色:_animationController.value>0.5?颜色。白色:颜色。黑色54,
尺寸:26.0,
),
),
);
}
空开(){
if(_animationController.isdissed){
_animationController.forward();
}
}
无效关闭(){
如果(_animationController.isCompleted){
_animationController.reverse();
}
}
void _onFabTap(){
if(_animationController.isdissed){
open();
}否则{
close();
}
}
void _onIconClick(){
onPressed();
close();
}
}
我如何解决这个问题?我认为主要的问题在于
\u buildFabCore(),
,我在这个类中使用了这个方法


提前感谢

考虑为
\u buildFabCore
内部的
浮动操作按钮
heroTag
传递一个值,或者只需传递
null


如果应用程序中使用了另一个
FloatingActionButton
,则可能会发生这种情况,因此如果您没有为每个按钮传递不同的
heroTag
,则会出现此错误。

FloatingActionButton
没有任何
Hero
t