#firebase #flutter #firebase-realtime-database
#огневая база #трепетание #firebase-база данных в реальном времени
Вопрос:
Я хочу добавить в код условное выражение, чтобы вызывались и отображались данные, для которых поле «категория» введено как BS в базе данных firebase realtime. Вот изображение таблицы базы данных: https://imgur.com/a/PkdI71d
Как мне добавить выражение в следующий код, чтобы отображалось только «Английский для развития карьеры», а не «Навыки работы в Excel для бизнеса», поскольку «Английский для развития карьеры», или в тесте 4 есть поле category = ‘bs’, но в тесте 5 его нет, поэтому оно не будет отображаться.
Код:
class _BusinessPage1State extends State<BusinessPage1> {
List<AllCourses> coursesList = [];
@override
void initState(){
super.initState();
DatabaseReference referenceAllCourses = FirebaseDatabase.instance.reference().child('AllCourses');
referenceAllCourses.once().then(((DataSnapshot dataSnapshot){
coursesList.clear();
var keys = dataSnapshot.value.keys;
var values = dataSnapshot.value;
for(var key in keys){
AllCourses allCourses = new AllCourses(
values [key]["courseName"],
values [key]["teacher"],
values [key]["category"],
);
coursesList.add(allCourses);
}
setState(() {
//
});
}));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back, color: Colors.white),
onPressed: ()
{Navigator.pop(context);
Navigator.push(context, MaterialPageRoute(builder: (context)=>homepage()));}),
title: Text("Creator's Club"),
backgroundColor: Color(0xff2657ce),
elevation: 0,),
body: Container(
padding: EdgeInsets.all(20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Business', style: TextStyle(
color: Color(0xff2657ce),
fontSize: 27,
),),
Text('Choose which course you want to study.', style: TextStyle(
color: Colors.black.withOpacity(0.6),
fontSize: 20
),),
SizedBox(height: 10),
Expanded(
child: SingleChildScrollView(
child: Column(
children: <Widget>[
coursesList.length == 0 ? Center(child: Text("Loading...", style: TextStyle(fontSize: 15),)): ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: coursesList.length,
itemBuilder: (_, index) {
return CardUI(coursesList[index].courseName, coursesList[index].teacher, coursesList[index].category);
}
)
]
),
),
),
]
)
)
);
}
}
Widget CardUI (String courseName, String teacher, String category){
return Card(
elevation: 1,
margin: EdgeInsets.all(5),
color: Color(0xffd3defa),
child: Container(
color: Colors.white,
margin: EdgeInsets.all(1),
padding: EdgeInsets.all(10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
Container(
width: 50,
height: 50,
decoration: BoxDecoration(
color: Color(0xffd3defa),
borderRadius: BorderRadius.all(Radius.circular(17)),
),
child: IconButton(
icon: Icon(
Icons.star_border_rounded ,
color: Color(0xff2657ce),
),
),
),
SizedBox(width: 15,),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
child: InkWell(
onTap: (){},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(courseName, style: TextStyle(fontSize: 18)),
SizedBox(height: 5),
Text(teacher, style: TextStyle(fontSize: 15, color: Colors.grey)),
SizedBox(height: 5),
Text(category, style: TextStyle(fontSize: 15)),
],
),
)
)
]
)
]
)
],
)
),
);
}
Код для «Всех курсов» :
class AllCourses {
String courseName;
String teacher;
String category;
AllCourses(this.courseName, this.teacher, this.category);
}
Ответ №1:
Просто добавьте условие, чтобы проверить, является ли категория «bs», прежде чем добавлять курс в список курсов:
for(var key in keys){
AllCourses allCourses = new AllCourses(
values [key]["courseName"],
values [key]["teacher"],
values [key]["category"],
);
if(allCourses.get('category') == 'bs')
coursesList.add(allCourses);
}
Комментарии:
1. Это говорит мне, что «Метод’get’ не определен для типа’AllCourses'».
2. попробуйте allCourses[‘category’] вместо allCourses.get(‘category’)
3. Теперь я получаю сообщение об ошибке «Оператор'[]’ не определен для типа ‘AllCourses'». Ха-ха, я думаю, что я где-то что-то упускаю.
4. пожалуйста, отредактируйте свой вопрос и добавьте в него код класса AllCourses, чтобы я мог (надеюсь) дать вам точный ответ
5. Привет, я отредактировал свой вопрос и добавил его! В этом коде нет ничего особенного. Большое спасибо за помощь.