【问题标题】:"A Hero widget cannot be the descendant of another Hero widget" issue when showing SnackBar() widget显示 SnackBar() 小部件时出现“英雄小部件不能是另一个英雄小部件的后代”问题
【发布时间】:2021-03-29 14:27:54
【问题描述】:

我用英雄包裹了一个脚手架。从抽屉中打开子页面并显示 SnackBar() 小部件时,使用

ScaffoldMessenger.of(context).showSnackBar(snackBar);

我得到了错误

A Hero widget cannot be the descendant of another Hero widget.
'package:flutter/src/widgets/heroes.dart':
Failed assertion: line 375 pos 7: 'context.findAncestorWidgetOfExactType<Hero>() == null'

找到临时解决问题的解决方案:

将全局键添加到脚手架

final _scaffoldKey = GlobalKey<ScaffoldState>();

并用

调用小吃店
_scaffoldKey.currentState..showSnackBar(snackBar); //this is working but deprecated

也试过

ScaffoldMessenger.of(_scaffoldKey.currentContext).showSnackBar(snackBar); //also leads to the error with the Hero

编辑 - 在 GitHub 上提交了一个问题: https://github.com/flutter/flutter/issues/79359

【问题讨论】:

    标签: flutter


    【解决方案1】:

    你不能在Scaffold上使用Hero动画,因为它里面有英雄动画, 特别是在FloatingActionButton 上,如果您的Scaffold 中有晶圆厂,请尝试将其删除,否则添加Container 作为Scaffold 的主体并将其包装起来。 Hero

    【讨论】:

    • 当然可以。但是当我只用英雄包裹身体时,应用栏没有动画
    • 哈哈,抱歉.. 我正在使用它来制作从容器到新页面的页面过渡动画@nt4f04und
    • @nt4f04und 请看pub.dev/packages/animations——这是我要实现的过渡效果
    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 2018-08-31
    • 2020-04-23
    • 2021-04-08
    • 2017-10-17
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多