dart 如何解决ListTile中的前导溢出问题?

h4cxqtbf  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(202)

我遇到ListTileleading溢出问题:

Leading widget consumes entire tile width. Please use a sized widget, or consider replacing ListTile with a custom widget (see https://api.flutter.dev/flutter/material/ListTile-class.html#material.ListTile.4)

'package:flutter/src/material/list_tile.dart':

package:flutter/…/material/list_tile.dart:1

Failed assertion: line 1204 pos 7: 'tileWidth != leadingSize.width || tileWidth == 0.0'

我该怎么解决呢?
我参考了this question并尝试了this answer中的代码。但是,我仍然得到同样的错误。
我的代码:

ListTile(
  leading: CircleAvatar(
    radius: 17.5,
    maxRadius: 17.5,
    minRadius: 17.5,
    backgroundColor: Colors.cyan,
    child: const Icon(
      Icons.timer_outlined,
      color: Colors.white,
    ),
  ),
  minLeadingWidth: 0.0,
  title: Row(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    children: [
      Text(
        …,
        style: const TextStyle(color: Colors.cyan, fontSize: 16.0),
      ),
      Text(
        …,
        maxLines: 1,
        overflow: TextOverflow.ellipsis,
        style: TextStyle(color: Color.fromARGB(255, 117, 117, 117), fontSize: 16.0 * 0.8),
      ),
    ],
  ),
  …
),

如果您需要更多信息,请随时发表评论。
如何解决ListTile中的leading溢出问题?我将非常感谢任何帮助。提前感谢!

1rhkuytd

1rhkuytd1#

您只需删除:

maxRadius: 17.5,
minRadius: 17.5,
ListTile(
      leading: CircleAvatar(
        radius: 17.5,
        backgroundColor: Colors.cyan,
        child: const Icon(
          Icons.timer_outlined,
          color: Colors.white,
        ),
      ),
      minLeadingWidth: 0.0,
      title: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
        Text(
        "abc",
        style: const TextStyle(color: Colors.cyan, fontSize: 16.0),
      ),
      Text("aa",
      maxLines: 1,
      overflow: TextOverflow.ellipsis,
      style: TextStyle(color: Color.fromARGB(255, 117, 117, 117), fontSize: 16.0 * 0.8),
),
],
),
),

f0brbegy

f0brbegy2#

这是因为ListTile受到约束的方式。

前导和尾随小部件的高度根据Material规范进行限制。为便于访问,单行ListTiles有一个例外。请注意,前导和尾随小部件可以根据需要水平扩展,因此请确保它们受到适当的限制。

在您的代码中,您正在创建半径为17.5CircleAvatar,因此其直径为35,可能大于ListTile约束高度leading
因此,尝试 Package 在所需高度的SizedBox中,以克服错误。
编辑:在您请求代码后,我发现半径不是导致问题的原因,问题实际上是原因,因为您同时指定了radiusmaxRadiusminRadius
Flutter编译器在使用radiusmax min Radius属性时会混淆,因此会抛出以下错误。

radius == null || (minRadius == null && maxRadius == null)': is not true.

因此,您需要指定radiusminRadiusmaxRadius
将代码更改为

leading: CircleAvatar(
        // radius: 17.5, 👈 remove this line
        maxRadius: 17.5,
        minRadius: 17.5,
        backgroundColor: Colors.cyan,
        child: Icon(
          Icons.timer_outlined,
          color: Colors.white,
        ),
      ),

leading: CircleAvatar(
        radius: 17.5,
        // maxRadius: 17.5, // 👈 remove these
        // minRadius: 17.5,
        backgroundColor: Colors.cyan,
        child: Icon(
          Icons.timer_outlined,
          color: Colors.white,
        ),
      ),

现在错误消失了!!

相关问题