Я получаю данные из базы данных MySQL, используя запрос POST, и данные возвращаются в формате JSON. Вот как выглядит мой JSON:
[
{
"course_name": "Calculus & Analytical Geometry",
"batch_name": "FA16-BCS-B16-B"
},
{
"course_name": "COURSE 3",
"batch_name": "FA16-BCS-B16-B"
},
{
"course_name": "COURSE 4",
"batch_name": "FA16-BCS-B16-A"
}]
У меня в приложении есть синтаксический анализатор JSON следующим образом:
class TeacherHomeData {
final String course_name;
final int batch_name;
TeacherHomeData(
{this.course_name, this.batch_name});
factory TeacherHomeData.fromJson(Map<String, dynamic> json) {
return TeacherHomeData(
course_name: json['course_name'],
batch_name: json['batch_name'],
);
}
Map<String, dynamic> toMap() => {
"batch_name": course_name,
"batch_name": batch_name};
}
Данные возвращаются в правильный формат, как это требуется, и также анализируется правильно. Я хочу собрать все course_name
в одном DropDownMenu
и все batch_name
во втором пункте меню. Я хочу, чтобы данные извлекались из базы данных и отображались в DropDownMenu до того, как пользователь начнет использовать экран. У меня есть следующий код для отображения примеров данных в одном DropDownMenu:
class Courses {
int id;
String name;
Courses(this.id, this.name){fun();}
static List<Courses> getCourses() {
return <Courses>[
Courses(1, 'CSC311(Automata)'),
Courses(2, 'CSC441(Compiler Construction)'),
Courses(3, 'CSC446(Artificial Intelligence)'),
Courses(4, 'CSC333(HCI)'),
Courses(5, 'CSC275(Database)'),
];
}}
class _Teacher_HomeState extends State<TeacherHome> {
List<Courses> _courses = Courses.getCourses();
List<DropdownMenuItem<Courses>> _dropdownMenuItems;
Courses _selectedCourses;
@override
void initState() {
_dropdownMenuItems = buildDropdownMenuItems(_courses);
_selectedCourses = _dropdownMenuItems[0].value;
super.initState();
}
List<DropdownMenuItem<Courses>> buildDropdownMenuItems(List coursess) {
List<DropdownMenuItem<Courses>> items = List();
for (Courses course in coursess) {
items.add(
DropdownMenuItem(
value: course,
child: Text(course.name),
),
);
}
return items;
}
onChangeDropdownItem(Courses selectedCourse) {
setState(() {
_selectedCourses = selectedCourse;
});
}}
Я хочу отобразить данные, возвращенные из базы данных, для отображения в двух разных DropDownMenus, но я не получаю точный способ чтобы сделать это.
Вот как я получаю данные из базы данных:
AppUtils.getStringFromPref("teacher_id").then((teacher_id) async {
final data = await http
.post(AppUtils.teacherHomeLink, body: {"teacher_id": teacher_id});
var response=data.body;
final parsed = json.decode(response).cast<Map<String, dynamic>>();
List<TeacherHomeData> teacherHomeData = parsed
.map<TeacherHomeData>((json) => TeacherHomeData.fromJson(json))
.toList();
Любая помощь будет очень признательна. Заранее спасибо