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],
      ),
    );
  }
}

0 ответов

Другие вопросы по тегам