gpt4 book ai didi

dart - 英雄动画在嵌套导航器中不起作用

转载 作者:行者123 更新时间:2023-12-03 02:38:50 24 4
gpt4 key购买 nike

我试图在我的第一个flutter应用程序中使用Hero Animations,但是已经有使用this方法实现的instagram这样的底部导航,并且我发现Hero Animations在嵌套的Navigators中不起作用。

例如,您可以从here中获取完整示例,并将home: MainScreen(),类中的HeroApp替换为

home: Navigator(onGenerateRoute: (_) {
return MaterialPageRoute(builder: (_) => MainScreen());
}),

和英雄动画将中断。

也许还有其他方法可以实现每个选项卡具有独立堆栈的底部导航,这些方法不使用嵌套导航器,但我还没有找到任何方法。

因此,任何建议非常感谢。

UPD:我刚刚意识到答案应该在 MaterialApp类和bingo中!

有一个可行的天真解决方案:
home: Navigator(
onGenerateRoute: (_) => MaterialPageRoute(builder: (_) => MainScreen()),
observers: [HeroController()],
),

但是在 MaterialApp源代码中,事情有点复杂,所以也许有些隐藏的事情打破了我的幼稚解决方案。因此问题仍然悬而未决。

最佳答案

这是因为Hero依赖HeroController中的导航器具有的MaterialApp,而您的自定义导航器则没有,要解决此问题,只需添加 Controller 即可,如下所示。

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);
}
}

关于dart - 英雄动画在嵌套导航器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51760916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com