1. ホーム
  2. flutter

[解決済み] サブツリー内に同じタグを共有するヒーローが複数存在する

2022-04-13 07:32:15

質問

ある画面から別の画面へ、ルートで移動しようとしています。ページが提供されるルートに移動するためのボタンを押すと、エラーが発生します。

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>

これを解決するにはどうしたらいいのでしょうか?

どのように解決するのですか?

以前にも遭遇したことがあるのですが、それは、2つの FloatingAction ボタンがある場合、heroTag プロパティと値をそれぞれ FloatingActionButton というエラーが出てしまいます。

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

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

提供されたサンプルコードから、あなたが持っているのは FloatingActionButton しかし、エラーからすると、それを参照しているようです。

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

おそらく、移動先のページで使用したために、エラーが発生したのでしょう。タグ付けされたヒーローを作成するプログラム的な方法を使用している場合、それらに異なるタグを与える方法を見つける必要があることに注意してください。たとえば ListView.builder() 作成 FloatingActionButtons の場合、各ボタンが異なるタグを持つように、文字列フォーマットでタグを渡してみてください、例えば。 heroTag: "btn$index" .

いずれにせよ、誰かのお役に立てれば幸いです。