ListView.builder不显示任何内容

时间:2020-07-21 12:33:03

标签: flutter listview dart google-cloud-firestore

在脚手架的构建方法中,我尝试将主体替换为

  1. 具有指定高度的容器,包裹在_questionList()周围(返回ListView.builder),

  2. 包含一个子级Expanded的列,该列环绕_questionList()

它们都不起作用。传递了builder函数内部if-else块中的前两个子句。错误可能是什么?

class _QuestionPageState extends State<QuestionPage> {
  final String roomName;
  final String roomID;

  _QuestionPageState(this.roomName, this.roomID);

  Widget _questionList() {
    return StreamBuilder<QuerySnapshot>(
      stream: RoomDbService(roomName, roomID).getRoomQuestions(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) { // passed
            return new Text('Loading...');
        } else if (snapshot.hasError) { // passed
          return new Text("Error...");
        } else {
          // snapshot.data.documents.forEach((element) {print(element);}); (prints nothing)

          return ListView.builder(
              itemCount: snapshot.data.documents.length,
              itemBuilder: (context, index) {
                final docSS = snapshot.data.documents[index];
                // print(snapshot.data.documents[index].data["text"]);  (prints nothing)

                //return Text(snapshot.data.documents[index].data["text"]);  (returns nothing)

                return QuestionTile(
                  questionID: docSS.documentID,
                  text: docSS.data["text"],
                  roomName: roomName,
                  roomID: roomID
                );
           }
          );
        }
      }
    );
  }

  @override
  Widget build(BuildContext context) {

    RoomDbService dbService = RoomDbService(roomName, roomID);

    return Scaffold(

      appBar: ... ,

      body: CustomScrollView(
        slivers: <Widget>[
          SliverFixedExtentList(
            itemExtent: 500,
            delegate: SliverChildListDelegate([_questionList()]),
          ),
        ],
      ),

    );
  }
}

如果我设法正确输入if-else块的第3个子句,那么流肯定没有问题吗?

2 个答案:

答案 0 :(得分:0)

尝试实现此代码

class _QuestionPageState extends State<QuestionPage> {
  final String roomName;
  final String roomID;

  _QuestionPageState(this.roomName, this.roomID);

  Widget _questionList() {
    return StreamBuilder<QuerySnapshot>(
      stream: RoomDbService(roomName, roomID).getRoomQuestions(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) { // passed
            return new Text('Loading...');
        } else if (snapshot.hasError) { // passed
          return new Text("Error...");
        } else {
          // snapshot.data.documents.forEach((element) {print(element);}); (prints nothing)

          return ListView.builder(
              itemCount: snapshot.data.documents.length,
              itemBuilder: (context, index) {

              if (itemCount === 0) return Text('item count value is 0');
                final docSS = snapshot.data.documents[index];
                // print(snapshot.data.documents[index].data["text"]);  (prints nothing)

                //return Text(snapshot.data.documents[index].data["text"]);  (returns nothing)

                return QuestionTile(
                  questionID: docSS.documentID,
                  text: docSS.data["text"],
                  roomName: roomName,
                  roomID: roomID
                );
           }
          );
        }
      }
    );
  }

  @override
  Widget build(BuildContext context) {

    RoomDbService dbService = RoomDbService(roomName, roomID);

    return Scaffold(

      appBar: ... ,

      body: CustomScrollView(
        slivers: <Widget>[
          SliverFixedExtentList(
            itemExtent: 500,
            delegate: SliverChildListDelegate([_questionList()]),
          ),
        ],
      ),

    );
  }
}

答案 1 :(得分:0)

请尝试以下解决方案:

return ListView.builder(
              itemCount: snapshot.data.documents.length,
              shrinkWrap : true,
              itemBuilder: (context, index) {

              if (itemCount === 0) return Text('item count value is 0');
                final docSS = snapshot.data.documents[index];
                // print(snapshot.data.documents[index].data["text"]);  (prints nothing)

                //return Text(snapshot.data.documents[index].data["text"]);  (returns nothing)

                return QuestionTile(
                  questionID: docSS.documentID,
                  text: docSS.data["text"],
                  roomName: roomName,
                  roomID: roomID
                );
           }
          );

您可以使用shrinWrap:true

`