Добавление условия для извлечения определенных данных?

#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. Привет, я отредактировал свой вопрос и добавил его! В этом коде нет ничего особенного. Большое спасибо за помощь.