Flutter Нет обратной связи PageRoute
У меня проблема с PageRouting в моем приложении Flutter. Я могу успешно отлаживать свой код, но функция «onTap» контейнеров в GridView не работает. Может ли это произойти, потому что функция onTap дважды присутствует в моем коде - один раз в классе проекта и один раз в initState?
В приложении вы можете найти мой код.
Буду очень признателен, если вы мне поможете!
import 'package:flutter/material.dart';
class ProjectCard extends StatefulWidget {
const ProjectCard({
Key? key,
required this.project,
}) : super(key: key);
final Project project;
@override
_ProjectCardState createState() => _ProjectCardState();
}
class _ProjectCardState extends State<ProjectCard> {
// ignore: non_constant_identifier_names
List<Project> demo_projects = [];
@override
void initState() {
super.initState();
demo_projects.add(
Project(
title: 'Test',
description: 'Test',
onTap: () {
Navigator.pushNamed(context, '/second');
}),
);
}
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {},
child: Container(
decoration: BoxDecoration(
color: secondaryColor,
borderRadius: BorderRadius.all(Radius.circular(30))),
padding: const EdgeInsets.all(defaultPadding),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
widget.project.title!,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 20, color: primaryColor),
),
Spacer(),
Text(
widget.project.description!,
maxLines: Responsive.isMobileLarge(context) ? 3 : 4,
overflow: TextOverflow.ellipsis,
style: TextStyle(height: 1.5),
),
Spacer(),
],
)),
);
}
}
class Project {
final String? title, description;
void Function() onTap;
Project({this.title, this.description, required this.onTap});
}
// ignore: non_constant_identifier_names
List<Project> demo_projects = [
Project(
title: "Test",
description: "Test",
onTap: () {},
),
Project(
title: "Test 2",
description: "Test 2",
onTap: () {},
),
Project(
title: "Test 2",
description: "Test 2",
onTap: () {},
),
];
class MyProjects extends StatelessWidget {
const MyProjects({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Categories",
style: Theme.of(context).textTheme.headline6,
),
const SizedBox(height: defaultPadding),
Responsive(
mobile: ProjectsGridView(
crossAxisCount: 1,
childAspectRatio: 2.5,
),
mobileLarge: ProjectsGridView(crossAxisCount: 2),
tablet: ProjectsGridView(childAspectRatio: 1.1),
desktop: ProjectsGridView(),
)
],
);
}
}
class ProjectsGridView extends StatelessWidget {
const ProjectsGridView({
Key? key,
this.crossAxisCount = 3,
this.childAspectRatio = 1.5,
}) : super(key: key);
final int crossAxisCount;
final double childAspectRatio;
@override
Widget build(BuildContext context) {
return GridView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: demo_projects.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: crossAxisCount,
childAspectRatio: childAspectRatio,
crossAxisSpacing: defaultPadding,
mainAxisSpacing: defaultPadding,
),
itemBuilder: (context, index) => ProjectCard(
project: demo_projects[index],
),
);
}
}