我正在尝试在我的第一个 flutter 应用程序中使用英雄动画,但已经有像 Instagram 一样的底部导航,它是使用this https://stackoverflow.com/a/46498543/10184844方法,我发现英雄动画在嵌套导航器中不起作用。
例如你可以得到完整示例 from here https://flutter.io/cookbook/navigation/hero-animations/并替换home: MainScreen(),
from HeroApp
上课到
home: Navigator(onGenerateRoute: (_) {
return MaterialPageRoute(builder: (_) => MainScreen());
}),
英雄动画将会中断。
也许还有其他一些方法可以为每个选项卡实现带有独立堆栈的底部导航,不使用嵌套导航器,但我还没有找到。
所以非常感谢任何建议。
UPD:我刚刚意识到答案应该是MaterialApp
类和宾果游戏!
有一个可行的简单解决方案:
home: Navigator(
onGenerateRoute: (_) => MaterialPageRoute(builder: (_) => MainScreen()),
observers: [HeroController()],
),
But in MaterialApp
源代码的事情稍微复杂一些,所以也许有一些隐藏的东西,这打破了我天真的解决方案。因此问题仍然悬而未决。
这是因为Hero https://api.flutter.dev/flutter/widgets/Hero-class.html依赖于一个英雄控制器 https://api.flutter.dev/flutter/widgets/HeroController-class.html其中导航器在材料应用程序 https://api.flutter.dev/flutter/material/MaterialApp-class.html有,但您的自定义没有,要解决此问题,只需添加控制器,如下所示。
import 'package:flutter/material.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
HeroController _heroController;
@override
void initState() {
super.initState();
_heroController = HeroController(createRectTween: _createRectTween);
}
@override
Widget build(BuildContext context) {
return Navigator(
observers: [_heroController],
onGenerateRoute: (settings) {
return MaterialPageRoute(
settings: settings, builder: (context) => Text(''));
},
);
}
RectTween _createRectTween(Rect begin, Rect end) {
return MaterialRectArcTween(begin: begin, end: end);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)