Как получить все дочерние данные о вложенных данных Firebase во Flutter? - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу отобразить все (вложенные) данные базы данных Firebase в реальном времени на основе идентификатора пользователя из Firebase Auth.Я использую Flutter Android.

Моя база данных выглядит так:

enter image description here

И мой код примерно такой:

home.dart

class _HomePageState extends State<HomePage> {
  List<Todo> _dataList;

  final FirebaseDatabase _database = FirebaseDatabase.instance;

  StreamSubscription<Event> _onTodoAddedSubscription;
  Query _todoQuery;

  @override
  void initState() {
    super.initState();
    _dataList = List();
    _todoQuery = _database.reference().child(widget.userId);
    _onTodoAddedSubscription = _todoQuery.onChildAdded.listen(_onEntryAdded);
  }

  @override
  void dispose() {
    _onTodoAddedSubscription.cancel();
    super.dispose();
  }

  _onEntryAdded(Event event) {
    setState(() {
      _dataList.add(Todo.fromSnapshot(event.snapshot));
    });
  }

  Widget _showTodoList() {
    if (_dataList.length > 0) {
      return ListView.builder(
          shrinkWrap: true,
          itemCount: _dataList.length,
          itemBuilder: (BuildContext context, int index) {
            String todoId = _dataList[index].key;
            bool status = _dataList[index].status;
            int datetime = _dataList[index].datetime;
            double current = _dataList[index].current;
            double voltage = _dataList[index].voltage;
          });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _showTodoList(),
    );
  }
}

и мой класс модели:

todo.dart

class Todo {
  int datetime;
  double current;
  double voltage;
  String key;
  bool status;
  String userId;

  Todo(this.datetime, this.userId, this.status, this.current, this.voltage);

  Todo.fromSnapshot(DataSnapshot snapshot)
      : key = snapshot.key,
        status = snapshot.value["status"],
        datetime = snapshot.value["datetime"],
        current = snapshot.value["current"],
        voltage = snapshot.value["voltage"];

  toJson() {
    return {
      "status": status,
      "datetime": datetime,
      "current": current,
      "voltage": voltage,
    };
  }
}

Я сделал это.

Но что, если я изменю базу данных на что-то вроде этого (добавьте вложенный дочерний элемент): enter image description here

Как получить все дочерние данные на основе идентификатора пользователя Firebase auth?

Заранее спасибо

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