Как распечатать список из запроса базы данных Firebase с помощью Flutter? - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь распечатать список атрибутов из моей базы данных firebase. База данных в настоящее время структурирована следующим образом:

enter image description here

Сначала я хотел бы распечатать список названий шоу на консоли, чтобы я мог видеть, что он работает а затем добавить его в ListView позже. Любая помощь приветствуется!

import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

// This is the model class
class Mod {
  final String name;
  final String nextEpisode;
  final String prevEpisode;

  Mod(this.name, this.nextEpisode, this.prevEpisode);

  Mod.fromJson(Map<String, dynamic> json)
    : name = json['name'],
      nextEpisode = json['nextEpisode'],
      prevEpisode = json['prevEpisode'];
}


// This is the screen class
class FTest2 extends StatefulWidget {
  @override
  _FTest2State createState() => _FTest2State();
}

class _FTest2State extends State<FTest2> {

  List<Mod> list = List();

  MakeCall() {
    final mainReference = FirebaseDatabase.instance.reference();
    mainReference.child('-M5Uol7Xldnc8wvNXnNg').once().then((DataSnapshot dataSnapshot){
      this.setState(() {
        for(var value in dataSnapshot.value){
          list.add(Mod.fromJson(value));
        }
      });
    });
    print(list);
  }

  void getData() {
    MakeCall();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('This is App Bar for the FB Test')),
        body: Column(
          children: <Widget>[
            RaisedButton(
              child: Text('Press for data'),
              onPressed: () {
                getData();
              },
            ),
          ],
        ));
  }
}

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Вы перебираете узлы одной спецификации c show, что означает, что ваш value на самом деле является одним из дочерних свойств под этим: name, nextEpisode, prevEpisode. Вероятно, вы ищете, чтобы послушать onChildAdded для всех шоу, а затем получить свойство name для каждого:

mainReference.child('shows')
  .onChildAdded
  .forEach((event) => {
    print(event.snapshot.key+": "+event.snapshot.value.toString());
    this.setState(() {
      list.add(Mod.fromJson(event.snapshot.value["name"]));
    });
  });

Также посмотрите мою форму ответа через несколько недель a go здесь: Flutter: порядок базы данных Firebase Real-TimeByChild не влияет на результат запроса

1 голос
/ 05 мая 2020

Ваша ссылка неверна, вам нужно пройти по базе данных сверху вниз до узла, который вы хотите получить, поэтому используйте следующее:

final mainReference = FirebaseDatabase.instance.reference("shows");
mainReference.child('-M5Uol7Xldnc8wvNXnNg').once().then((DataSnapshot dataSnapshot){

передайте аргумент shows методу reference() .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...