Проблема маршрутизации: «Есть несколько героев, которые используют один и тот же тег в поддереве». - PullRequest
0 голосов
/ 27 мая 2020
import 'package:flutter/material.dart';
import 'package:ui_mvc/Rings.dart';


class Diamonds extends StatefulWidget {
  @override
  _DiamondsState createState() => _DiamondsState();
}

class _DiamondsState extends State<Diamonds> {

  var dataList= [
    {
     "name": "A1",
      "image":"assets/1.jpg" ,
      "location": "Delhi",
    },
    {
      "name": "A2",
      "image": "assets/2.jpg" ,
      "location": "Delhi",
    },
    {
      "name": "A3",
      "image": "assets/3.jpg" ,
      "location": "Delhi",
    },
    {
      "name": "A4",
      "image": "assets/4.jpg" ,
      "location": "Delhi",
    },
    {
      "name": "A5",
      "image": "assets/5.jpg" ,
      "location": "Delhi",
    },

  ];
  @override
  Widget build(BuildContext context) {
    return GridView.builder(
        scrollDirection: Axis.horizontal,
        itemCount: dataList.length,
        gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 1),
        itemBuilder: (BuildContext context,int index){
          return SingleProd(
            prodName: dataList[index]['name'],
            prodImage: dataList[index]['image'],
            prodLocation: dataList[index]['location'],
          );
        });
  }
}

class SingleProd extends StatelessWidget {
  final prodName;
  final prodImage;
  final prodLocation;

  SingleProd({
   this.prodName,
   this.prodImage,
   this.prodLocation,
});

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Hero(
          tag: prodName,
          child: Material(
            child: InkWell(
              onTap: ()=>
                Navigator.of(context).push(
                  new MaterialPageRoute(builder: (context)=> new Rings())
                ),
              child: GridTile(
                footer: Container(
                  color: Colors.white,
                  child: ListTile(
                    title: Text(
                      prodName,
                      textAlign: TextAlign.left,
                    ),
                    subtitle: Text(
                      prodLocation,
                      textAlign: TextAlign.left,
                    ),
                  ),
                ),
                child: Image.asset(
                    prodImage,
                    fit: BoxFit.fitHeight)
              ),
            ),
          )
      ),
    );
  }
}

Итак, я пытаюсь отобразить горизонтальный список из 5 плиток. Я хочу, чтобы каждая плитка перенаправлялась на одну и ту же страницу (пока), поэтому я вызываю Rings (), которая определена на другой странице. А при нажатии на одну из плиток экран становится черным. Но он просто продолжает показывать мне эту ошибку : Следующее утверждение было выдано во время обратного вызова планировщика: Есть несколько героев, которые используют один и тот же тег в поддереве.

В каждом поддереве, для которого герои должны быть анимированы (т.е. поддерево PageRoute), каждый герой должен иметь уникальный ненулевой тег. В этом случае у нескольких героев был следующий тег: A

Вот поддерево одного из героев-нарушителей: Тег героя: Состояние: _HeroState # d0a27 Когда было создано исключение, это был стек:

0 Hero._allHeroesFor.inviteHero. (пакет: flutter / src / widgets / heroes.dart: 265: 11)

1 Hero._allHeroesFor.inviteHero (пакет: flutter / src / widgets / heroes.dart: 276: 8)

2 Hero._allHeroesFor.visitor (пакет: flutter / src / widgets / heroes.dart: 295: 21)

3 SingleChildRenderObjectElement.visitChildren (пакет: flutter / src / widgets / framework.dart: 5433: 14)

4 Hero._allHeroesFor.visitor (пакет: flutter / src / widgets / heroes.dart: 308: 15)

1 Ответ

0 голосов
/ 28 мая 2020

Я разобрался с проблемой. Поскольку @Jot сказал, что prodname не было уникальным в каждом случае, плюс я сделал аналогичный горизонтальный список, используя те же данные, поэтому он создал ошибку. Таким образом, при вводе уникального имени продукта, такого как a1, a2 или a, b, c, ошибка была удалена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...