Как я могу получить данные Firebase в флаттер - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь получить список данных из базы данных Firebase и отобразить его в виде списка в моем приложении флаттера, в настоящий момент я не могу отобразить данные в пользовательском интерфейсе. Когда я пытаюсь распечатать этот список не содержит значений, когда должны отображаться имена, которые я ввел в базу данных.

Это база данных, которую я пытаюсь получить:

This is the database that I am trying to retrieve:

Это код, который я реализовал для моего пользовательского интерфейса, есть идеи, что здесь за проблема?

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:firebase_database/ui/firebase_animated_list.dart';
import 'SignInSuccessPage.dart';

class SignInPage extends StatefulWidget {
  @override
  SignInPageState createState() => SignInPageState();
}

class SignInPageState extends State<SignInPage> {
  List<Volunteer> volunteers;
  Volunteer volunteer;
  DatabaseReference volunteerRef;


  @override
  void initState() {
    super.initState();
    volunteers = new List();
    volunteer = Volunteer("","", "");
    final FirebaseDatabase database = FirebaseDatabase.instance; /
    volunteerRef = database.reference().child('volunteerapp-cec4f');
    volunteerRef.onChildAdded.listen(_onEntryAdded);
    volunteerRef.onChildChanged.listen(_onEntryChanged);

  }

  _onEntryAdded(Event event) {
    setState(() {
      volunteers.add(Volunteer.fromSnapshot(event.snapshot));
    });
  }

  _onEntryChanged(Event event) {
    var old = volunteers.singleWhere((entry) {
      return entry.key == event.snapshot.key;
    });
    setState(() {
      volunteers[volunteers.indexOf(old)] = Volunteer.fromSnapshot(event.snapshot);
    });
  }

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('List of Names'),
      ),
      resizeToAvoidBottomPadding: false,
      body: Column(
        children: <Widget>[
          Flexible(
            child: FirebaseAnimatedList(
              query: volunteerRef,
              itemBuilder: (BuildContext context, DataSnapshot snapshot,
                  Animation<double> animation, int index) {
                return new ListTile(
                  title: Text(volunteers[index].firstName),
                  subtitle: Text(volunteers[index].lastName),

                );
              },
            ),
          ),
        ],
      ),
    );
  }
}

//the volunteer class which contains all the info about each volunteer object and links to firebase
class Volunteer {
  String key;
  String firstName;
  String lastName;

  Volunteer(this.key, this.firstName, this.lastName);

  Volunteer.fromSnapshot(DataSnapshot snapshot)
      : key = snapshot.key,
        firstName = snapshot.value["firstName"],
        lastName = snapshot.value["lastName"];

  toJson() {
    return {
      "key": key,
      "firstName": firstName,
      "lastName": lastName,
    };
  }
}

1 Ответ

0 голосов
/ 17 января 2019

Вам не нужно включать имя вашего проекта в вызов child, оно уже есть в базовой ссылке.

Итак:

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