【问题标题】:StreamBuilder inside the ListviewBuilder not scrollingListviewBuilder 内的 StreamBuilder 不滚动
【发布时间】:2021-03-31 05:09:21
【问题描述】:

问题:我是 Flutter 开发的初学者。我试图从 firestore 获取数据并显示它。但是滚动列表视图没有响应一根手指,所以我不得不使用多个手指。如何解决这个问题。

body: StreamBuilder(
    stream: _firebase_auth.collection("ContactData").snapshots(),
    builder: (BuildContext context, snapshot) {
      if (snapshot.hasData) {
        return ListView.builder(
            itemCount: snapshot.data.docs.length,
            itemExtent: 100.0,
            itemBuilder: (context, index) {
              DocumentSnapshot data = snapshot.data.docs[index];
              return Card(
                child: ListView(padding: EdgeInsets.all(8.0), children: [
                  Text('sds'),
                  Text('sds'),
                  Text('sds'),
                  Text('sds'),
                  Text('sds'),
                ]),
              );
            });
      } else {
        return Text('Loading Data.....');
      }
    },
  ),

【问题讨论】:

    标签: flutter


    【解决方案1】:

    在 listView.builder 中添加这一行

    physics: AlwaysScrollableScrollPhysics(),
    

    【讨论】:

    • 我用过但输出相同。感谢您的帮助。
    • 试试 NeverScrollableScrollPhysics()
    • 我解决了。使用带有 SingleChildScrollView 的扭曲流构建器,设置 ListviewBuilder shrinkWrap: true,physics: ScrollPhysics() 并设置 ListView physical: NeverScrollableScrollPhysics() 现在可以完美运行。感谢您的帮助。
    【解决方案2】:

    您应该使用 SingleChild 滚动视图包装 streamBuilder 或使用 shrinkWrap: true,physics: ScrollPhysics(),

    body: StreamBuilder(
        stream: _firebase_auth.collection("ContactData").snapshots(),
        builder: (BuildContext context, snapshot) {
          if (snapshot.hasData) {
            return ListView.builder(
                shrinkWrap: true,
                physics: ScrollPhysics(),
                itemCount: snapshot.data.docs.length,
                itemExtent: 100.0,
                itemBuilder: (context, index) {
                  DocumentSnapshot data = snapshot.data.docs[index];
                  return Card(
                    child: ListView(padding: EdgeInsets.all(8.0), children: [
                      Text('sds'),
                      Text('sds'),
                      Text('sds'),
                      Text('sds'),
                      Text('sds'),
                    ]),
                  );
                });
          } else {
            return Text('Loading Data.....');
          }
        },
      ),
    

    【讨论】:

    • 我两个都用过,但结果一样。感谢您的帮助
    【解决方案3】:
    • 使用SingleChildScrolView 包装流构建器。

    这将使屏幕成为可滚动的元素。

    • ListView.builder 的物理设置为NeverScrollablePhysics

    这会阻止父 ListView.Builder 的滚动,但没关系,因为它是父级,SingleChildScrollView 是 可滚动。

    • ListView 的物理设置为Scrollable

    如果你愿意,不确定是要滚动这些项目还是只显示

    【讨论】:

    • 是的。我想要滚动项目。我解决了。使用带有 SingleChildScrollView 的扭曲流构建器,设置 ListviewBuilder shrinkWrap: true,physics: ScrollPhysics() 并设置 ListView physical: NeverScrollableScrollPhysics() 现在可以完美运行。感谢您的帮助。
    • 如果这解决了您的问题,请考虑将其标记为您帖子的正确答案,谢谢。
    猜你喜欢
    • 2020-10-18
    • 2020-01-22
    • 2020-05-05
    • 2021-07-06
    • 2020-08-22
    • 2020-08-18
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多