【问题标题】:Flutter : Weird gap between items of ListViewFlutter:ListView 项目之间的奇怪差距
【发布时间】:2018-10-29 22:47:04
【问题描述】:

我在使用 Flutter 和 ListView 小部件时遇到了一个奇怪的问题。我可以看到我的项目之间的差距。我可以看到黑色背景。我是否缺少某些东西以使这些差距不显示?这是整个应用程序代码:

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      home: Container(
        color: Colors.black,
        child: new ListView.builder(
          itemBuilder: (BuildContext context, int index) {
            return new Container(
              color: Colors.pink.shade100,
              child: Container(
                height: 100.0,
              ),
            );
          },
          itemCount: 100,
        ),
      ),
    );
  }
}

注意间隙并不总是可见的,并且在滚动时会发生变化。

【问题讨论】:

  • 您使用的是哪个版本/频道的颤振?你试过模拟器 android/ios 吗?
  • 我已经试过你的代码 - 我的设备上没有空白
  • - Flutter 0.9.4 • 频道测试版 • github.com/flutter/flutter.git - 框架 • 修订版 f37c235c32(5 周前) • 2018-09-25 17:45:40 -0400 - 引擎 • 修订版 74625aed32 - 工具• Dart 2.1.0-dev.5.0.flutter-a2eb050044 我在 Pixel 2 XL 模拟器上遇到了同样的问题。 gif 来自 Pixel 1
  • 我在 Pixel 3 XL 上进行了测试,但没有发生。仅在我的 PIxel 1(物理)和 Pixel 2(模拟器)上
  • macOS 上的 Pixel 2 模拟器存在同样的问题。

标签: flutter


【解决方案1】:

我尝试运行您的代码,但列表项之间没有任何意外的填充。我目前正在使用 Flutter 2.5

您可以尝试在 ListView 上添加填充 0 并查看它是否会删除意外填充。

child: ListView.builder(
  padding: EdgeInsets.all(0.0),
  ...
),

【讨论】:

    【解决方案2】:

    添加addRepaintBoundaries: false,使其变成这样:

    child: ListView.builder(
      addRepaintBoundaries: false,
      ...
    ),
    

    我不明白为什么以及如何,但就我而言,差距刚刚消失。

    有时它会显示。设置为true,热重载,再次设置为false,热重载。它会消失的。

    【讨论】: