Flutter Hero 小部件未按预期工作

Posted

技术标签:

【中文标题】Flutter Hero 小部件未按预期工作【英文标题】:Flutter Hero widget not working as expected 【发布时间】:2021-07-10 13:24:55 【问题描述】:

我正在尝试使用 Hero 动画将小部件从一个屏幕传递到另一个屏幕。我正在关注flutter.dev页面上的简单示例,但它似乎不起作用。

我有两个屏幕,ScreenOne 和 ScreenTwo,都是 StatefulWidget。 ScreenOne 包含一个小部件列表,点击时我应该导航到 ScreenTwo 并使用 Hero 动画。

这是用于导航到 ScreenTwo 和 hero 小部件的 ScreenOne 部分代码

 Material(
        child: SizedBox(
          width: double.infinity,
          child: InkWell(
            onTap: () 
              Navigator.push(context, MaterialPageRoute(builder: (_) 
                return ScreenTwo(
                  imageUrl : "anUrl",
                );
              ));

            child: Padding(
              padding: EdgeInsets.all(10),
              child: Row(
                mainAxisSize: MainAxisSize.max,
                children: [
                  Hero(
                    tag: "imageHero",
                    child: Image(
                      width: 60,
                      height: 60,
                      image:
                          Image.network("anUrl").image,
                    ),
                  ),
                  // Other widgets

这是在 ScreenTwo 上

@override
Widget build(BuildContext context) 
return Scaffold(
  appBar: AppBar(),
  body: Container(
    child: Hero(
      tag: "imageHero",
      child: Image(
        width: 60,
        height: 60,
        image: Image.network("anUrl").image,
      ),
    ),
  ),
);

现在,当我导航到 ScreenTwo 时,我看不到 Hero 动画。怎么了?

【问题讨论】:

您可以尝试使用 Navigator.of(context).push(...) 而不是 Navigator.push(...) 进行导航吗? github.com/flutter/website/blob/master/examples/_animation/… 它不起作用。 您是否尝试使用 StatelessWidget 而不是 StatfulWidget ? 【参考方案1】:

将标签字段设为变量,并将其用于两者,例如

int imageId = 1;

 Hero(
                tag: imageId,
                child: Image(
                  width: 60,
                  height: 60,
                  image:
                      Image.network("anUrl").image,
                ),

并将其用于两条路线

【讨论】:

以上是关于Flutter Hero 小部件未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 我可以用 Hero 包装每个小部件来为它们设置动画吗

Flutter 嵌套小部件 setState 无法按预期工作

Flutter - 来自 Firebase 的英雄小部件子图像 url

禁用 Flutter Hero 反向动画

如果在initState()中创建,则Flutter Switch小部件不起作用

Flutter:在 ListView Builder 中使用 Hero 动画