显示 SnackBar() 小部件时出现“英雄小部件不能是另一个英雄小部件的后代”问题

时间:2021-03-29 14:27:54

标签: flutter

我用英雄包裹了一个脚手架。从抽屉中打开子页面并显示 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

1 个答案:

答案 0 :(得分:0)

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