Расширяемая карта с героем

#flutter #dart #animation

Вопрос:

Я пытаюсь «развернуть» карту во время навигации. Почти каждый компонент внутри этой карты представляет собой Hero . Я подошел к этой проблеме с Stack позицией a и, но таким образом, я должен позиционировать каждый элемент вручную.

Проблема в том, что Flutter это не позволяет иметь Hero внутри другого Hero . Кто-нибудь находит лучшую реализацию?

Первая страница:

     return Scaffold(
      body: GestureDetector(
                onTap: (details) {
                  print("navigate to second detail page");
                },
                child: Stack(
                      children: <Widget>[
                        Hero(
                          tag: "container${_task['name']}",
                          child: Container(
                            width: double.infinity,
                            margin: const EdgeInsets.only(right: 20),
                            decoration: BoxDecoration(
                              color: Colors.white,
                              borderRadius: BorderRadius.circular(12),
                            ),
                          ),
                        ),
                        Positioned(
                          top: 20,
                          left: 15,
                          child: Hero(
                            tag: "icon${_task['name']}",
                            child: Container(
                              padding: EdgeInsets.all(10),
                              decoration: BoxDecoration(
                                borderRadius: BorderRadius.circular(100),
                                border: Border.all(
                                  width: 2,
                                  color: Colors.black12,
                                ),
                              ),
                            ),
                          ),
                        ),
                        Positioned(
                          right: 30,
                          top: 30,
                          child: Hero(
                            tag: "menu${_task['name']}",
                            child: Text("name")
                          ),
                        )
                      ],
                    ),
              ),
    );

 

Это расширенное:

 return Scaffold(
      backgroundColor: task.color,
      body: Stack(
        children: [
          Hero(
            tag: "container${task.name}",
            child: Material(
              child: Container(
                padding: const EdgeInsets.all(12),
                color: Colors.white,
                height: double.infinity,
                child: SafeArea(
                  top: true,
                  bottom: false,
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.start,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      IconButton(
                        icon: Icon(Platform.isIOS == true
                            ? Icons.arrow_back_ios
                            : Icons.arrow_back),
                        onPressed: () => Navigator.pop(context),
                      ),
                    ],
                  ),
                ),
              ),
            ),
          ),
          Positioned(
            child: Hero(
              tag: "icon${task.name}",
              child: Text(
                task.name,
                style: TextStyle(color: task.color),
              ),
            ),
          )
        ],
      ),
    );