Flutter新手一无所知,例如,如何根据以前列表中的专业来构建医生的ListView?

问题描述 投票:0回答:1

我在ListView中显示了医学专业列表,我希望能够单击某个专业,然后显示具有该专业的医生的列表视图。如果我单击“心脏病专家”以显示医生的心脏病专家。我无法正常工作。我有专科课,医生课,医生名单和专科名单。我搞砸了我的代码,以至于我什至不能在这里发布它。您能告诉我如何显示“专业列表”,然后单击某个专业,然后导航并构建与所选专业匹配的“医生列表”吗?非常感谢!!!

这里是类和列表:

class Doctors {
  String name;
  String specialty;

  Doctors({
    this.name,
    this.specialty,
  });
}

List<Doctors> dummyDoctors = [
  Doctors(
    name: "Susan Finn",
    specialty: "Surgery",
  ),
  Doctors(
    name: "Mike Donovan",
    specialty: "Cardiology",
  ),
  Doctors(
    name: "Tom Sharp",
    specialty: "Dermatology",
  ),
];

class Specialties{
  final String specialty;

  Specialties({
    this.specialty
    });
}

List<Specialties> specialties = [
  Specialties(
    specialty: 'Surgery',
  ),
  Specialties(
    specialty: 'Cardiology',
  ),
  Specialties(
    specialty: 'Dermatology',
  ),
];

这就是我所有的混乱,需要知道/理解的,这:

import 'package:flutter/material.dart';
import 'package:training2/specialty_modelo.dart';
import 'package:training2/second_screen.dart';

class SpecialtyScreen extends StatelessWidget {
  String get specialty => null;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Container(
          height: 300.0,
          child: ListView.builder(
            scrollDirection: Axis.horizontal,
            itemCount: specialties.length,
            itemBuilder: (BuildContext context, int index) {
              Specialties specialties = specialties[index];
              return GestureDetector(
                onTap: () => Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (_) => SecondRoute(
                      specialties: specialties)),),
                child: Container(
                  margin: EdgeInsets.all(10.0),
                  width: 210.0,
                  child: Stack(
                    alignment: Alignment.topCenter,
                    children: <Widget>[
                      Column(
                        mainAxisAlignment: MainAxisAlignment.end,
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: <Widget>[
                          Text(
                            specialty,
                            style: TextStyle(
                              color: Colors.grey,
                            ),
                          ),
                        ],
                      ),
                    ],
                  ),
                ),
              );
            },
          ),
        ),
      ],
    );
  }
}


Zvi Karp在第二个屏幕上建议使用此屏幕,该屏幕将根据专业显示医生,但仍然没有运气,无法正常工作

import 'package:flutter/material.dart';
import 'package:training2/specialty_modelo.dart';

class SecondRoute extends StatelessWidget {
  //final specialtyDoctorsList allDoctors;

    SecondRoute({
        this.specialty, Specialties specialties,
    });
    final String specialty;

  get allDoctors => null;

@override
  Widget build(BuildContext context) {
    List<Doctors> specialtyDoctorsList = allDoctors.where((Doctors doctor) => doctor.specialty == this.specialty);
    return Container();
  }
}

listview flutter push builder
1个回答
0
投票

根据评论,在第一页中调用第二页,然后将所选的专业传递给它,如下所示:

Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondRoute(specialty: specialty)),
            );

然后在第二页中将专业作为参数:

class SecondRoute extends StatelessWidget {
    SecondRoute({
        this.specialty,
    });
    final String specialty;

现在您可以使用它来找特定的医生:

@override
  Widget build(BuildContext context) {
    List<Doctors> specialtyDoctorsList = allDoctors.where((Doctors doctor) => doctor.specialty == this.specialty);
    return Container();
  }
© www.soinside.com 2019 - 2024. All rights reserved.