扑。如何在列内创建树形图结构

Posted

技术标签:

【中文标题】扑。如何在列内创建树形图结构【英文标题】:Flutter. How to create tree graph structure inside a column 【发布时间】:2021-10-08 16:23:31 【问题描述】:

我需要为查询生成器创建 UI。我想做类似this

问题是我不知道如何创建 And/Or 运算符“括号”。


  @override
  Widget build(BuildContext context) 
    return Column(
      children: [
        Row(
          children: [
            Operator(),
            Column(
              children: childFiltersAndGroups,
            ),
          ],
        ),
        Actions(...),
      ],
    );
  

有人可以指导我如何实现 Operator 小部件吗?其余的事情我不需要帮助。

【问题讨论】:

【参考方案1】:

也许这会有所帮助:

class Operator extends StatelessWidget 
  final String operatorValue;
  final Color color;
  final Color? textBackgroundColor;

  const Operator(Key? key, required this.operatorValue, required this.color, this.textBackgroundColor)
      : super(key: key);

  @override
  Widget build(BuildContext context) 
    return Stack(
      alignment: Alignment.center,
      children: [
        CustomPaint(
          painter: BracketPainter(color),
          size: const Size(double.infinity, double.infinity)
        ),
        Container(
          padding: EdgeInsets.all(4),
          decoration: BoxDecoration(
            borderRadius: const BorderRadius.all(
              Radius.circular(20),
            ),
            color: textBackgroundColor ?? color,
          ),
          child: Text(operatorValue),
        )
      ],
    );
  



class BracketPainter extends CustomPainter 
  final Color color;

  BracketPainter(this.color);

  @override
  void paint(Canvas canvas, Size size) 
    final centerX = size.width / 2;
    final path = Path()
      ..moveTo(size.width, 0)
      ..lineTo(centerX, 0)
      ..lineTo(centerX, size.height)
      ..lineTo(size.width, size.height);
    final paint = Paint()
      ..color = color
      ..style = PaintingStyle.stroke
      ..strokeWidth = 2;
    canvas.drawPath(path, paint);
  

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) 
    return this != oldDelegate;
  

示例用法:

return SizedBox(
  height: 200,
  width: 40,
  child: Operator(
    operatorValue: "AND",
    color: Colors.green,
    textBackgroundColor: Colors.green[300],
  ),
);

在 DartPad 中呈现如下:

【讨论】:

有任何东西的小部件不是吗?感谢您向我介绍 CustomPainter :)

以上是关于扑。如何在列内创建树形图结构的主要内容,如果未能解决你的问题,请参考以下文章

在 extjs 4 的网格列内显示树

在列内检查特定字符串,android studio

颤振让孩子在列内匹配另一个孩子的宽度

在列内添加逗号分隔值

scala spark 使用 expr 在列内赋值

在列内垂直居中 Bootstrap 3 按钮