Ich versuche, mit der Route von einem Bildschirm zum anderen zu navigieren. Wenn ich auf die Schaltfläche drücke, damit die Seite zur Route wechselt, wird der Fehler angezeigt
I/flutter ( 8790): Another exception was thrown: There are multiple heroes that share the same tag within a subtree.
Hier ist der Code:
Routen:
<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');
},),
),
);
}
}
Und der Fehler:
══╡ 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>
Wie löse ich das?
ListTile
mit einemHero
Inneren. DiesHero
ist nicht nur ein Held, sondern es wird mit Ihrem multipliziertitems.length
, daher sollte der Tag sein'tag$index'
Sie können eine eindeutige ID oder nur null festlegen:
quelle
Nur für Leser in der Zukunft:
Um @ m.vincent Kommentar zu schätzen, was diesen Fehler für mich verursacht, ist, dass ich Hero verwendet habe, in
SliverChildBuilderDelegate
dem (offensichtlich) ein Index enthalten ist, also habe ich den Index mit dem Tag'tag$index'
wie diesem verwendetHINWEIS: Dies kann bei jedem Widget mit vom Index erstellten untergeordneten Elementen wie ListView.Builder der Fall sein
quelle
Fügen Sie beliebig viele Widgets mit Helden-Tags wie Strings hinzu
quelle
Ich habe denselben Fehler durchlaufen. Dies liegt an der mehrfachen Verwendung von Schaltflächen wie schwebenden Aktionstasten auf einem Bildschirm.
Früher habe ich stattdessen eine schwebende Aktionstaste verwendet und sie in einen Gesten-Detektor geändert , um ontap zu verwenden, damit es funktioniert
quelle
Einfach einstellen,
tag: Uuid()
wenn mehrere Elemente mit demselben Tag vorhanden sind.quelle