Я пытаюсь создать виджет с детектором жестов, который откроет 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)
],
),
);
}
}
'''