buildWithOutline method

Widget buildWithOutline()

构建带轮廓的 Widget(需要在 build 方法中调用)

Implementation

Widget buildWithOutline() {
  final widget = build();
  if (_outlineWidth == null || _outlineWidth == 0) {
    return widget;
  }

  // 通过 Stack 和多个 Container 来实现 outline 效果
  // outline 是 border 外面的轮廓,可以通过叠加边框来实现
  return Stack(
    children: [
      // 外层轮廓(offset 偏移)
      if (_outlineOffset != null && _outlineOffset! > 0)
        Positioned.fill(
          child: Container(
            margin: EdgeInsets.all(_outlineOffset!),
            decoration: BoxDecoration(
              border: Border.all(
                color: _outlineColor ?? Colors.black,
                width: _outlineWidth ?? 2.0,
              ),
              borderRadius: _borderRadius,
            ),
          ),
        )
      else
        Container(
          decoration: BoxDecoration(
            border: Border.all(
              color: _outlineColor ?? Colors.black,
              width: _outlineWidth ?? 2.0,
            ),
            borderRadius: _borderRadius,
          ),
          child: widget,
        ),
      // 如果 offset 为 0,直接叠加
      if (_outlineOffset == null || _outlineOffset == 0)
        widget,
    ],
  );
}