Flutter - анимация героя не работает с навигатором по вкладкам - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок во флаттере и использую виджет героя для создания анимации для плавающей кнопки.

У меня есть нижняя навигация, и я должен открыть страницу с помощью навигатора вкладок. Но анимация героя не работает.

Я использую все возможные решения, но анимация героя все еще не работает для маршрута страницы.

Вот мой фрагмент кода.

FloatingActionButton(
          onPressed: () {
            _selectTab(TabItem.Floating);
          },
          child: Icon(Icons.add),
          heroTag: "tag",
        ),

Это нажатие на потрясающую кнопку для открытия новой страницы

 void _selectTab(TabItem tabItem) {
    if (tabItem == currentTab) {
      // pop to first route
      _navigatorKeys[tabItem].currentState.popUntil((route) => route.isFirst);
    } else {
      setState(() => currentTab = tabItem);
    }
  }

В навигаторе

 @override
  Widget build(BuildContext context) {
    var routeBuilders = _routeBuilders(context);
    return Navigator(
        observers: [
          HeroController(),
        ],
        key: widget.navigatorKey,
        initialRoute: TabNavigatorRoutes.root,
        onGenerateRoute: (routeSettings) {
          return PageRouteBuilder(
              transitionDuration: Duration(seconds: 1),
              pageBuilder: (_, __, ___) =>
                  routeBuilders[routeSettings.name](context));
        });
  }

Маршрут

 if (widget.tabItem == TabItem.Floating) {
          return ActFloatingScreen(
            title: 'Floating Tab',
            onPush: (materialIndex) =>
                _push(context, materialIndex: materialIndex),
          );
        }

pu sh

 void _push(BuildContext context, {int materialIndex: 500}) {
    var routeBuilders = _routeBuilders(context, materialIndex: materialIndex);
    Navigator.push(
        context,
        PageRouteBuilder(
            transitionDuration: Duration(seconds: 1),
            pageBuilder: (_, __, ___) =>
                routeBuilders[TabNavigatorRoutes.detail](context)));
  }

и наконец мой желаемый класс, который я хочу открыть с помощью анимации героев

return Scaffold(
      backgroundColor: Colors.white,
      body: Hero(
        tag: "tag",
        child: Stack(
          overflow: Overflow.visible,
          children: <Widget>[
            Container(
              color: Colors.green,
              height: 200,
            ),
            PositionedDirectional(
              start: 0,
              end: 0,
              top: 150,
              child: Center(
                  child: Icon(
                    Icons.add,
                    size: 100,
                  )),
            ),
          ],
        ),
      ),
    );
...