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

Hero Animation not working inside nested Navigator

我正在尝试在我的第一个 flutter 应用程序中使用 Hero Animations,但是已经有像底部导航这样的 instagram,它是使用 方法实现的,我发现 Hero Animations 在嵌套中不起作用领航员。

例如,您可以从 here 获得 完整示例 并将 home: MainScreen(),HeroApp class 替换为

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

英雄动画会中断。

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

非常感谢任何建议。

更新:我刚刚意识到答案应该在 MaterialApp class 和宾果游戏中!

有一个可行的简单解决方案:

home: Navigator(
  onGenerateRoute: (_) => MaterialPageRoute(builder: (_) => MainScreen()),
  observers: [HeroController()],
),

但是在 MaterialApp 源代码中事情稍微复杂一些,所以可能有一些隐藏的东西打破了我天真的解决方案。因此问题仍然悬而未决。

这是因为Hero relies on a HeroController which the navigator in MaterialApp有但你的自定义没有,要解决这个问题只需添加控制器,就像这样。

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