Выборка данных из firebase на основе внешнего ключа

#firebase #dart #firebase-realtime-database

#firebase #dart #firebase-база данных в реальном времени

Вопрос:

Я использую firebase realtime DB и хотел бы получать данные на основе CategoryID.

Вот структура БД.

введите описание изображения здесь

Вот код:

   Future<void> fetchAndSetProducts(String id) async { 
const url = 'https://random-9006.firebaseio.com/products.json';
try {
  final response = await http.get(url);
  final extractedData = json.decode(response.body) as Map<String, dynamic>;
  print(extractedData.toString()); 
}
  

Как создать URL-адрес, чтобы получить продукты в соответствии с переданным идентификатором CategoryID?

Комментарии:

1. почему вы не используете плагины firebase?

2. Просто учусь @PeterHaddad

3. Я понимаю, но вам было бы проще извлекать и обрабатывать данные в firebase, если вы используете следующие плагины github.com/FirebaseExtended/flutterfire

Ответ №1:

Вы можете использовать следующий плагин для извлечения данных из firebase:

Внутри pubspec.yaml :

 dependencies:
  firebase_database: ^4.1.1
  firebase_core: ^0.5.0 1
  

в main() функции инициализируйте Firebase:

 void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
  

Затем вы можете получить данные, используя следующий способ:

 Future<DataSnapshot> getData(String category){
 var dbRef = FirebaseDatabase.instance.reference().child("products");
 return await dbRef.orderByChild("categoryId").equalTo(category).once();
}
  

Затем вы можете вызвать этот future метод внутри a FutureBuilder . Для FutureBuilder проверки:

https://flutter.dev/docs/cookbook/networking/fetch-data#5-display-the-data

https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html

Комментарии:

1. оцените подробное объяснение. Не могли бы вы также рассказать мне, как выполнить выборку по URL?

Ответ №2:

Я понял это.

Вы задаете тип данных final URL, и URL становится:

  final url = 'https://mydburl.firebaseio.com/products.json?orderBy="categoryId"amp;equalTo="$id"';