flutter 使用Wrap、Positioned、Chip时平台之间的布局不一致

wxclj1h5  于 2023-06-07  发布在  Flutter
关注(0)|答案(2)|浏览(162)

我正在为我的应用程序开发一个“徽章”小部件,并发现它在一些平台上的布局与预期一致,但在其他平台上却不一样。例如,这是Chrome的屏幕截图,其中徽章布局是我想要的:

但布局在iOS模拟器中并不正确:

正如你所看到的,星星在芯片内不再对齐,“行”之间的间距增加了。
我已经创建了一个简单的Flutter应用程序,您可以使用它来重现这个问题。README提供了有关此问题的更多详细信息:
https://github.com/philipmjohnson/fluttermonarchlayout
任何关于如何处理这个问题的建议都将受到高度赞赏!

egmofgnx

egmofgnx1#

Chip widget中的label参数接受Widget。您可以用一个行来包裹文本小部件,并将点放在文本之前。
示例:

class BadgeIcon extends StatelessWidget {
  const BadgeIcon({Key? key, required this.name, required this.level})
      : super(key: key);
  final String name;
  final int level;

  @override
  Widget build(BuildContext context) {
    const Color selectedColor = Colors.black;
    BadgeDot dot = const BadgeDot(color: selectedColor);

    List<Widget> dots = [];
    if (level == 1) {
      dots = [dot];
    } else if (level == 2) {
      dots = [dot, dot];
    } else if (level == 3) {
      dots = [dot, dot, dot];
    }

    return Padding(
      padding: const EdgeInsets.all(3.0),
      child: Chip(
        label: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: dots,
            ),
            const SizedBox(width: 4),
            Text(name),
          ],
        ),
      ),
    );
  }
}
3hvapo4f

3hvapo4f2#

我收到了一些建议,并在这里总结了我决定的方法和解决方案:
https://github.com/philipmjohnson/fluttermonarchlayout/tree/main#solutions

相关问题