我在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();
}
}
根据评论,在第一页中调用第二页,然后将所选的专业传递给它,如下所示:
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();
}