трепетание GridView вызывает ошибку Navigator.push - PullRequest
0 голосов
/ 12 ноября 2018

В моем приложении есть кнопка для перехода на страницу контактов.Это работает хорошо, когда GridView имеет только одну плавающую кнопку.Но это будет иметь ошибку, когда GridView имеет более одного плавающего кнопки.Пожалуйста, помогите решить эту проблему.

Ошибка:

  • флаттер: во время обратного вызова планировщика было выдано следующее утверждение:
  • флаттер: есть несколько героев, которые разделяютодин и тот же тег в поддереве.
  • флаттер: в каждом поддереве, для которого герои должны быть анимированы (обычно это поддерево PageRoute), каждый герой
  • флаттер: должен иметь уникальный ненулевой тег.
  • флаттер: в этом случае несколько героев имели следующий тег:
  • флаттер: вот поддерево для одного из героев-оскорбителей:
  • флаттер: # герой (тег:, состояние: _HeroState # 232b6)

enter image description here

class _DatabasePageState extends State<DatabasePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          backgroundColor: Colors.black,
          appBar: AppBar(
            title: Text('DB'),
            centerTitle: true,
            backgroundColor: Colors.black,
          ),
          body: _showOrderdatabase(),

        );
      }

      Widget _showOrderdatabase() {

        return Column(
          children: <Widget>[
            Container(
              height: 220.0,
              color: Colors.transparent,
              child: new Container(
                  padding: EdgeInsets.all(40.0),
                  decoration: new BoxDecoration(
                    color: Colors.green,
                    borderRadius: BorderRadius.all(const Radius.circular(40.0)),
                  ),
                  child: new Column(
                    children: <Widget>[
                      Text(
                        "vds",
                        style: TextStyle(fontSize: 16.0),
                      ),
                      IconButton(
                        icon: Icon(
                          Icons.email,
                          color: Colors.blueAccent,
                        ),
                        iconSize: 50.0,
                        onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (c) => new ContactUs())),
                      ),
                    ],
                  )),
            ),
            Expanded(
              child: GridView.count(
                primary: false,
                padding: const EdgeInsets.all(20.0),
                crossAxisSpacing: 30.0,
                mainAxisSpacing: 30.0,
                crossAxisCount: 4,
                children: <Widget>[
                  FloatingActionButton(
                    onPressed: null,
                    backgroundColor: Colors.orange,
                    child: Text('今天'),
                    foregroundColor: Colors.black,
                  ),
                  FloatingActionButton(
                    onPressed: null,
                    backgroundColor: Colors.yellow,
                    child: Text('年'),
                    foregroundColor: Colors.black,
                  ),

                ],
              ),
            )
          ],
        );
      }
    }

1 Ответ

0 голосов
/ 12 ноября 2018

FloatingActionButton имеет свойство heroTag со значением по умолчанию const _DefaultHeroTag(),.

Так как у вас есть два FloatingActionButton с, вы должны назначить разные теги для каждого из них:

   children: <Widget>[
      FloatingActionButton(
        onPressed: null,
        heroTag: 'Tag1',
        backgroundColor: Colors.orange,
        child: Text('今天'),
        foregroundColor: Colors.black,
      ),
      FloatingActionButton(
        onPressed: null,
        heroTag: 'Tag2',
        backgroundColor: Colors.yellow,
        child: Text('年'),
        foregroundColor: Colors.black,
      ),
    ],

Или вы можете установить оба параметра на null, чтобы виджет Hero не был добавлен в дерево.

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