본문 바로가기
Flutter/Flutter FAQ

flutter 하위 트리 내에서 동일한 태그를 공유하는 여러 영웅이 있습니다., There are multiple heroes that share the same tag within a subtree

by 베타코드 2023. 5. 9.
반응형

질문


저는 라우트를 사용하여 한 화면에서 다른 화면으로 이동하려고 합니다. 페이지를 이동시키기 위한 버튼을 누르면 다음과 같은 오류가 발생합니다.

I/flutter ( 8790): Another exception was thrown: There are multiple heroes that share the same tag within a subtree.

다음은 코드입니다:

라우트:

 <String, WidgetBuilder>{
    '/first':(BuildContext context) =>NavigatorOne() ,
    '/second':(BuildContext context) =>NavigatorTwo(),
    '/third':(BuildContext context) =>NavigatorThree(),

  },

Navigator.of(context).pushNamed('/first');
Navigator.of(context).pushNamed('/second');
Navigator.of(context).pushNamed('/third');

class NavigatorOne extends StatefulWidget {
  @override
  _NavigatorOneState createState() =>  _NavigatorOneState();
}

class _NavigatorOneState extends State<NavigatorOne> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(

      appBar: AppBar(),
      body: Container(
      color: Colors.green,
      child: RaisedButton(child: Text(' one 1'),onPressed: (){
        Navigator.of(context).pushNamed('/second');
      },),
    ),
    ); 
  }
}

그리고 오류는 다음과 같습니다:

══╡ EXCEPTION CAUGHT BY SCHEDULER LIBRARY ╞═════════════════════════════════════════════════════════ I/flutter (21786): The following assertion was thrown during a scheduler callback: I/flutter (21786): There are multiple heroes that share the same tag within a subtree. I/flutter (21786): Within each subtree for which heroes are to be animated (typically a PageRoute subtree), each Hero I/flutter (21786): must have a unique non-null tag. I/flutter (21786): In this case, multiple heroes had the following tag: <default FloatingActionButton tag>

어떻게 해결할 수 있을까요?


답변


이전에도 이와 같은 문제를 겪었었는데, 한 화면에 FloatingAction 버튼이 두 개 있어서 각각의 FloatingActionButton마다 heroTag 속성과 값을 추가해야 오류가 사라졌습니다.

예시:

FloatingActionButton(
    heroTag: "btn1",
    ...
)

FloatingActionButton(
    heroTag: "btn2",
    ...
)

제공된 코드 예시에서는 FloatingActionButton이 없는 것 같지만, 오류 메시지에서는 그것을 참조하는 것으로 보입니다:

I/flutter (21786): In this case, multiple heroes had the following tag: default FloatingActionButton tag

아마도 이것을 네비게이션하는 페이지에서 사용했기 때문에 오류가 발생한 것입니다. 태그된 hero를 프로그래밍 방식으로 사용하는 경우, 서로 다른 태그를 지정하는 방법을 찾아야 합니다. 예를 들어, ListView.builder()를 사용하여 FloatingActionButtons을 생성하는 경우, 각 버튼에 대해 서로 다른 태그를 전달하려면 문자열 포맷팅을 사용하여 태그를 지정할 수 있습니다. 예: heroTag: "btn$index".

반응형

댓글