Виджет Flutter Hero не работает должным образом

Я пытаюсь использовать анимацию героя для перехода с одного экрана на другой. Я следовал простому примеру на странице flutter.dev, но, похоже, он не работает.

У меня два экрана, ScreenOne и ScreenTwo, оба StatefulWidget. ScreenOne содержит список виджетов, и при нажатии я должен перейти к ScreenTwo и использовать анимацию Hero.

Это часть кода ScreenOne для перехода к ScreenTwo и виджету героя.

 Material(
        child: SizedBox(
          width: double.infinity,
          child: InkWell(
            onTap: () {
              Navigator.push(context, MaterialPageRoute(builder: (_) {
                return ScreenTwo(
                  imageUrl : "anUrl",
                );
              }));

            child: Padding(
              padding: EdgeInsets.all(10),
              child: Row(
                mainAxisSize: MainAxisSize.max,
                children: [
                  Hero(
                    tag: "imageHero",
                    child: Image(
                      width: 60,
                      height: 60,
                      image:
                          Image.network("anUrl").image,
                    ),
                  ),
                  // Other widgets

И это на ScreenTwo

@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(),
  body: Container(
    child: Hero(
      tag: "imageHero",
      child: Image(
        width: 60,
        height: 60,
        image: Image.network("anUrl").image,
      ),
    ),
  ),
);

}

Теперь, когда я перехожу к ScreenTwo, я не вижу анимацию Hero. Что случилось?


person giozh    schedule 15.04.2021    source источник
comment
Можете ли вы попробовать использовать Navigator.of(context).push(...) вместо Navigator.push(...)? github.com/flutter/website/blob/master/ examples / _animation /   -  person BabC    schedule 15.04.2021
comment
Не работает.   -  person giozh    schedule 15.04.2021
comment
А вы пробовали использовать StatelessWidget вместо StatfulWidget?   -  person BabC    schedule 15.04.2021


Ответы (1)


сделайте поле тега переменной и используйте его для обоих, например

int imageId = 1;

 Hero(
                tag: imageId,
                child: Image(
                  width: 60,
                  height: 60,
                  image:
                      Image.network("anUrl").image,
                ),

и используйте его для обоих маршрутов

person Mohammad Ali    schedule 15.04.2021