Проблемы просмотра списка с базой данных в реальном времени - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь соединить свою базу данных realTime с приложением флаттера для загрузки данных в просмотр списка. У меня есть проблема, когда я пытаюсь показать данные в моем списке, потому что он всегда отображает текст по умолчанию Я печатаю данные на консоли в студии android и вижу, что данные загружаются правильно, но просмотр списка их не видит.

Я отправляю код ниже:

class _ReadUsersDetailsState extends State<ReadUsersDetails> {
  List<FireBaseFunction> list = [];
  DatabaseReference databaseReference =
      FirebaseDatabase.instance.reference().child("DataBase");

  @override
  void initState() {
    super.initState();
    chargeData();

    print("List: $list");
  }

  void chargeData() {
    databaseReference.once().then((DataSnapshot snap) {
      var keys = snap.value.keys;
      var data = snap.value;

      for (var key in keys) {
        FireBaseFunction fireBaseFunction =
            new FireBaseFunction(data[key]['Name'], data[key]['Surname']);
        list.add(fireBaseFunction);
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: new Text('Database'),
      ),
      body: Container(
        child: createListView(),
      ),
    );
  }

  Widget createListView() {
    print("List1: $list");
    return list.length == 0
        ? new Text("Data not available")
        : new ListView.builder(
            itemBuilder: (_, index) {
              return interface(list[index].name, list[index].surname);
            },
            itemCount: list.length,
          );
  }

  Widget interface(String name, String surname) {
    return Card(
      child: Container(
        height: 90,
        child: Padding(
          padding: EdgeInsets.only(top: 20, bottom: 20),
          child: Column(
            children: <Widget>[
              new Text("Name: " + name),
              new Text("Surname: " + surname),
            ],
          ),
        ),
      ),
    );
  }
}

1 Ответ

1 голос
/ 21 февраля 2020

Вам нужно будет позвонить setState() после изменения данных, чтобы сообщить виджету об изменениях и о том, что ему нужно выполнить повторную визуализацию.

  void chargeData() {
    databaseReference.once().then((DataSnapshot snap) {
      var keys = snap.value.keys;
      var data = snap.value;

      for (var key in keys) {
        FireBaseFunction fireBaseFunction =
            new FireBaseFunction(data[key]['Name'], data[key]['Surname']);
        list.add(fireBaseFunction);
      }
      setState(() {});
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...