Listview 不知道如何构建列表视图的新手,例如,根据上一个列表中的专业构建医生列表视图?

Listview 不知道如何构建列表视图的新手,例如,根据上一个列表中的专业构建医生列表视图?,listview,flutter,push,builder,Listview,Flutter,Push,Builder,我有一个医疗专业列表显示在一个列表视图中,我想能够点击一个专业,然后显示一个与该专业的医生列表视图。如果我点击“心脏病专家”向医生展示心脏病专家。我不能让它工作。我有专科班,医生班,医生名单和专科名单。我把我的代码弄得一团糟,我甚至不能把它贴在这里。您能告诉我如何显示“专科列表”并单击某个专科,然后导航并构建与所选专科匹配的“医生列表”吗?非常感谢 以下是课程和列表: class Doctors { String name; String specialty; Doctors({

我有一个医疗专业列表显示在一个列表视图中,我想能够点击一个专业,然后显示一个与该专业的医生列表视图。如果我点击“心脏病专家”向医生展示心脏病专家。我不能让它工作。我有专科班,医生班,医生名单和专科名单。我把我的代码弄得一团糟,我甚至不能把它贴在这里。您能告诉我如何显示“专科列表”并单击某个专科,然后导航并构建与所选专科匹配的“医生列表”吗?非常感谢

以下是课程和列表:

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


导入“包装:颤振/材料.省道”;
进口“包装:培训2/专业/模型dart”;
导入“包:训练2/秒屏幕.省道”;
类SpecialtyScreen扩展了无状态小部件{
字符串get speciality=>null;
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
容器(
高度:300.0,
子项:ListView.builder(
滚动方向:轴水平,
itemCount:specialties.length,
itemBuilder:(构建上下文,int索引){
专业=专业[索引];
返回手势检测器(
onTap:()=>Navigator.push(
上下文
材料路线(
建筑商:()=>SecondRoute(
专科:专科),),,
子:容器(
保证金:所有边缘套(10.0),
宽度:210.0,
子:堆栈(
对齐:alignment.topCenter,
儿童:[
纵队(
mainAxisAlignment:mainAxisAlignment.end,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
专业
样式:TextStyle(
颜色:颜色。灰色,
),
),
],
),
],
),
),
);
},
),
),
],
);
}
}
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();
  }
}

导入“包装:颤振/材料.省道”;
进口“包装:培训2/专业/模型dart”;
类SecondRoute扩展了无状态小部件{
//最终专科医生名单列出所有医生;
第二条路线({
这个,特长,特长,
});
最终弦乐专业;
获取所有医生=>null;
@凌驾
小部件构建(构建上下文){
List specialtyDoctorsList=allDoctors.where((Doctors-doctor)=>doctor.speciality==this.speciality);
返回容器();
}
}

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

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();
  }
@覆盖
小部件构建(构建上下文){
List specialtyDoctorsList=allDoctors.where((Doctors-doctor)=>doctor.speciality==this.speciality);
返回容器();
}

你在哪里被卡住了?这可能有助于开始我可以来回走动,但我的第二个屏幕显示了所有的医生。好的,太好了,我已经发布了一个答案,希望我能帮上忙!Zvi Karp,谢谢,但由于我无法让它工作,我编辑了我的原始帖子,包括了所有的文件(模型类、第一屏和第二屏),仍然无法让它工作(无法理解:-(非常感谢你的帮助)