Как передать MaterialPageRoute виджету

Я пытаюсь создать виджет с детектором жестов, который откроет MaterialPageRoute, когда вы нажмете на него. В методе сборки я хочу ввести 3 конструктора, метку, значок и, наконец, маршрут. И ярлык, и значок работают нормально. Я не уверен, какую переменную использовать или синтаксис для ссылки. Я все еще новичок во Flutter и программировании в целом.

При нажатии ToolMaker в этом коде должен перейти к указанному мной MaterialPageRoute, которым в данном случае является ScoreKeeper (). Приведенный ниже код дает мне ошибку. Тип аргумента ScoreKeeper не может быть назначен типу параметра Navigator.

'''

class ToolsScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.start,
      children: [
        Text('Tools'),
        Row(
          children: [
            ToolMaker('Score Board', Icon(Icons.score_outlined), ScoreKeeper()),
          ],
        ),
      ],
    );
  }
}

class ToolMaker extends StatelessWidget {
  @required
  final String label;
  @required
  final Icon icon;
  final Navigator link;

  const ToolMaker(this.label, this.icon, this.link);

  @override
  Widget build(BuildContext context) {
    return Expanded(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          GestureDetector(
            onTap: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => this.link,
                ),
              );
            },
            child: Container(
              height: MediaQuery.of(context).size.width / 4,
              width: MediaQuery.of(context).size.width / 4,
              decoration: BoxDecoration(
                borderRadius: BorderRadius.all(Radius.circular(8)),
                color: Colors.white,
                border: Border.all(color: Colors.grey),
              ),
              child: Center(
                child: this.icon,
              ),
            ),
          ),
          Text(this.label)
        ],
      ),
    );
  }
}

'''


person Jacob Parrent    schedule 02.05.2021    source источник


Ответы (2)


При нажатии ToolMaker в этом коде должен перейти к MaterialPageRoute.

это функция, у вас есть несколько вариантов

1) Используйте параметр функции вместо final Navigator link; используйте final Function onTap;

в вашем детекторе жестов onTap вызовите функцию oncall

GestureDetector(
            onTap:widget.onTap,

затем при создании вашего виджета проанализируйте параметр

 ToolMaker('Score Board', Icon(Icons.score_outlined),myFunction),

совет: используйте именованные аргументы, добавив {} вокруг конструкторов виджетов.

 const ToolMaker({this.label, this.icon, this.link});

2 перемещаться с помощью

именованные маршруты.

person griffins    schedule 02.05.2021

Вам следует изменить тип Navigator на Widget.

person Community    schedule 02.05.2021