Получение данных из базы данных реального времени с помощью условного оператора

как я могу показать DeliveryBoys в определенном месте, в моей базе данных в реальном времени у меня есть значение, которое мне нужно для сравнения водителей, с которым является «Город». Я хотел бы иметь всех DeliveryBoys, которые находятся в определенном городе. Как мне это сделать? Использование флаттера

Я могу получить все драйверы только без условного оператора

** Это моя функция, которую я хочу изменить **

 retrieveOnlineDriversInformation(List onlineNearestDriversList) async {
    DatabaseReference ref =
        FirebaseDatabase.instance.ref().child("DeliveryBoys");
    for (int i = 0; i < onlineNearestDriversList.length; i++) {
      await ref
          .child(onlineNearestDriversList[i].driverId.toString())
          .once()
          .then((dataSnapshot) {
        var driverKeyInfo = dataSnapshot.snapshot.value;
        dList.add(driverKeyInfo);
      });
    }
  }

Структура базы данных

вы не можете запросить базу данных в реальном времени. вы должны фильтровать онлайн-пользователей по результату локально.

Manish Dayma 11.01.2023 11:15

@Manish Dayma Как я могу сделать это из предоставленного примера кода, который застрял?

peter makala 11.01.2023 12:57

Можете ли вы показать представление вашей структуры базы данных.

GrahamD 11.01.2023 21:08

@GrahamD обновлен, пожалуйста, нажмите на структуру базы данных

peter makala 12.01.2023 05:10

@GrahamD я заменил DeliveryBoy на драйверы.

peter makala 12.01.2023 05:13

Пожалуйста, покажите, как вы заполняете список onlineNearestDriversList и что он содержит.

GrahamD 12.01.2023 09:45

Привет @GrahamD "onlineNearestDriversList" использовался в функции только для цикла for

peter makala 15.01.2023 08:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Судя по вашим ответам и насколько я вижу, вам не нужна петля там, где она у вас есть. Поэтому я собираюсь проигнорировать его и просто показать вам код, который вернет список идентификаторов водителей всех drivers для city «Лусака».

Future<List<String>> retrieveOnlineDriversInformation() async {
  final driverIds = <String>[];
  DatabaseReference ref = FirebaseDatabase.instance.ref().child("drivers");
  try {
    await ref.orderByChild("city")
             .equalTo("Lusaka")
             .once()
             .then(
           (event) {
             if (event.snapshot.value != null) {
             final driverListData =
                 Map<String, dynamic>.from(event.snapshot.value! as Map);
             driverListData.forEach((key, value) {
                driverIds.add(key);
              });
             }
           },
  } on FirebaseException catch (error, stackTrace) {
  // < Some code here to print database error details or otherwise deal with it >
  } catch (error, stackTrace) {
  // < Some code here to print other error details or otherwise deal with it >
  }
  return driverIds;
}

Вместо этого вы можете изменить это, чтобы просто вернуть карту 'driverListData', которая содержит идентификатор каждого водителя и связанные данные водителя.

Еще пара моментов:

Вы не придерживаетесь стандартного соглашения об именах для имен узлов и полей базы данных. Я предлагаю вам всегда использовать нижний CamelCase в качестве стандарта (например, изменить DriverLicense на driverLicense), поскольку он будет соответствовать тому, что вы обычно называете переменными в коде Flutter/Dart.

Вам не нужно держать драйвер id в виде отдельного поля в узле driver. Это дубликат (и, следовательно, занимает место в базе данных) ключа записи driver, который уже доступен вам.

Как видите, вы всегда должны заключать логику вызова базы данных в предложения try/catch, чтобы обрабатывать любые ошибки, которые может вернуть вызов базы данных. Существуют определенные исключения, которые можно проверить с помощью предложения on.

Большое спасибо за ваш совет, очень надеюсь, что никогда не думал, что в этих областях обязательно что-то изменится.

peter makala 19.01.2023 06:58

Другие вопросы по теме