Animation 英雄动画从侧面菜单抽屉开始,在目标屏幕上结束

Animation 英雄动画从侧面菜单抽屉开始,在目标屏幕上结束,animation,flutter,widget,Animation,Flutter,Widget,我正在尝试做一个英雄动画,从侧菜单抽屉的项目(它的英雄小部件)开始,并在新屏幕的英雄小部件结束。例如,在下图中,当显示目的地路线时,饼图图标应为最终小部件设置动画: 每个屏幕都包含自己的脚手架和共享抽屉小部件实例: Scaffold( ... drawer: MyAppDrawer(); ) 因此,对于每个屏幕和相应的抽屉项目,我在屏幕上有一个英雄标记,它等于侧菜单抽屉项目的英雄标记 目标屏幕正在替换当前屏幕,如下所示: Navigator.of(context).push

我正在尝试做一个英雄动画,从侧菜单抽屉的项目(它的英雄小部件)开始,并在新屏幕的英雄小部件结束。例如,在下图中,当显示目的地路线时,饼图图标应为最终小部件设置动画:

每个屏幕都包含自己的脚手架和共享抽屉小部件实例:

Scaffold(
    ...
    drawer: MyAppDrawer();
 )
因此,对于每个屏幕和相应的抽屉项目,我在屏幕上有一个英雄标记,它等于侧菜单抽屉项目的英雄标记

目标屏幕正在替换当前屏幕,如下所示:

Navigator.of(context).pushReplacementNamed("/");
尝试在菜单项“动作”上按“替换屏幕”而不是“英雄动画”后,我发现以下错误:

There are multiple heroes that share the same tag within a subtree.
我猜这是因为每个屏幕都已经包含了相同的MyAppDrawer(具有相同的英雄标签)。。。但我不能从其他屏幕上忽略抽屉,因为我需要全局访问该菜单

从通用应用程序端菜单抽屉项到目标屏幕英雄小部件的英雄动画是否可能? 有没有从抽屉到屏幕展示英雄动画的经验


谢谢

问题在于,您没有与所有屏幕共享抽屉,每个屏幕创建一个新的MyAppDrawer。在这里快速思考,您可以在其他地方创建MyAppDrawer,并将相同的对象导入到每个屏幕上

问题在于,您没有与每个屏幕的所有屏幕共享该抽屉,而是创建了一个新的MyAppDrawer。在这里快速思考,您可以在其他地方创建MyAppDrawer,并将相同的对象导入到每个屏幕上

我在项目中已经遇到了这个英雄问题。 如果你把同样的英雄标签

tag:1 , tag :1, tag :1
那么你会得到这种错误

tag:2 , tag:3 , tag:4
通过此技巧,您将获得完美的解决方案。 请记住,每个英雄标签在一个屏幕中必须是唯一的。
如果您使用了flotingActionButton,那么您必须在按钮中添加define标记。

在我的项目中,我已经遇到了这个英雄问题。
 GestureDetector(
                        onTap: () => Navigator.push(
                            context,
                            PageRouteBuilder(
                                transitionDuration:
                                    Duration(milliseconds: 700),
                                pageBuilder: (_, __, ___) => StoryInside(
                                      tag: "Story $index",
                                    ))),
                        child: Hero(
                          tag: 'Story $index',
                          child: Material(
                            animationDuration: Duration(seconds: 20),
                            color: Colors.transparent,
                            child: ListTile(
                              title: Text(
                                'Story $index ',
                                style: style,
                              ),
                            ),
                          ),
                        )),


 Hero(
              tag: '${widget.tag}',
              transitionOnUserGestures: true,
              child: Text(
                '${widget.tag}',
                style: style,
              ),
            ),
如果你把同样的英雄标签

tag:1 , tag :1, tag :1
那么你会得到这种错误

tag:2 , tag:3 , tag:4
通过此技巧,您将获得完美的解决方案。 请记住,每个英雄标签在一个屏幕中必须是唯一的。
如果您使用了flotingActionButton,那么您必须在按钮内添加定义标签。

非常奇怪,您能否再次确认抽屉上的所有项目都有不同的标签?非常奇怪,您能否再次确认抽屉上的所有项目都有不同的标签
 GestureDetector(
                        onTap: () => Navigator.push(
                            context,
                            PageRouteBuilder(
                                transitionDuration:
                                    Duration(milliseconds: 700),
                                pageBuilder: (_, __, ___) => StoryInside(
                                      tag: "Story $index",
                                    ))),
                        child: Hero(
                          tag: 'Story $index',
                          child: Material(
                            animationDuration: Duration(seconds: 20),
                            color: Colors.transparent,
                            child: ListTile(
                              title: Text(
                                'Story $index ',
                                style: style,
                              ),
                            ),
                          ),
                        )),


 Hero(
              tag: '${widget.tag}',
              transitionOnUserGestures: true,
              child: Text(
                '${widget.tag}',
                style: style,
              ),
            ),