질문
저는 라우트를 사용하여 한 화면에서 다른 화면으로 이동하려고 합니다. 페이지를 이동시키기 위한 버튼을 누르면 다음과 같은 오류가 발생합니다.
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"
.
댓글