Не удается получить Flutter для создания нескольких виджетов на основе данных Firebase - PullRequest
0 голосов
/ 11 июня 2018

Я пытался в течение недели, искать и изменять свой код, но я просто не могу заставить его работать .. Я хочу создать список виджетов внутри стека и перепробовал много методов.Ниже приведен мой тестовый код с использованием метода forEach и методов StreamBuilder:

Метод 1:

class Recordlist extends StatelessWidget {

  @override
  Widget build(BuildContext context) {

    Firestore.instance.collection('records').document(uid).collection("pdrecords").getDocuments().then( (querySS) {
      querySS.documents.forEach( (doc) {
        return new Container();

      });

    }).catchError( (e) {
      return new Container();
    });
 }
}

Выше указано, что функция никогда не возвращает виджет

Метод 2:

class Recordlist extends StatelessWidget {


  @override
  Widget build(BuildContext context) {
Double count = 0.5;
return new StreamBuilder <QuerySnapshot>(
      stream: Firestore.instance.collection('records').document(uid).collection("pdrecords").snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {

        //final int recordCount = snapshot.data.documents.length;


        if (snapshot.hasData) {
          final int recordCount = snapshot.data.documents.length;
            print("got data. records: $recordCount");
            if (recordCount >0) {

              switch (snapshot.connectionState) {
                case ConnectionState.none: return new Text('');
                case ConnectionState.waiting: return new Text('Fetching data ...');
                case ConnectionState.active: {

                    count = count + 1.0; print("count: $count");
                    return new ListPDRecord(
                      margin: new EdgeInsets.only(bottom: 10.0) * count, // listSlidePosition * 5.5,
                      width: listTileWidth.value,
                      title: snapshot.data.documents.elementAt(0)['starttime'],
                      subtitle: snapshot.data.documents.elementAt(0)['endtime'],
                      image: nodata,
                      );

                }
                break;


                case ConnectionState.done: return new Text('Done:'); 
              }


            } else {
                return noDataListData(
                  listSlidePosition: listSlidePosition,
                  listTileWidth: listTileWidth,
                );
            }


 }
}

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

Я действительно запутался.Очень ценю помощь.

1 Ответ

0 голосов
/ 11 июня 2018

Вы строите только один раз.Вы должны взять каждый документ в снимке и сопоставить его с виджетом.Firebase способ сделать это ниже.

     StreamBuilder(
        stream: Firestore.instance
            .collection('flutter-posts')
            .orderBy('postTime', descending: true)
            .snapshots(),
        builder:
            (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (!snapshot.hasData)
            return const Center(child: CircularProgressIndicator());
          return ListView(
            padding: const EdgeInsets.only(top: 8.0),
            children:
                snapshot.data.documents.map((DocumentSnapshot document) {
              return SinglePost(
                document: document,
                currentUID: appState.firebaseUser.uid,
              );
            }).toList(),
          );
        },
      ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...