[flutter] flutter_svg에서 그림자 효과를 조절하는 방법은?

flutter_svg는 Flutter 앱에서 SVG 이미지를 표시하는 데 사용되는 라이브러리입니다. 그러나 flutter_svg 자체에는 그림자 효과를 조절하는 기능이 없습니다. 대신 SVG 이미지에 그림자를 표현하려면 다른 접근 방식이 필요합니다.

해결 방법

SVG 이미지에 그림자를 추가하는 방법은 두 가지가 있습니다.

1. SVG 코드에 직접 그림자 추가

SVG 이미지 파일의 코드를 열어 <filter> 요소를 사용하여 그림자를 정의할 수 있습니다. 이후 <feGaussianBlur><feOffset> 등의 필터를 사용하여 그림자의 크기와 위치를 조절할 수 있습니다.

예시:

<svg width="200" height="200"
    xmlns="http://www.w3.org/2000/svg">

  <defs>
    <filter id="f1" x="0" y="0" width="200%" height="200%">
      <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
      <feBlend in="SourceGraphic" in2="offOut" mode="normal" />
    </filter>
  </defs>

  <rect width="90" height="90" stroke="green" fill="yellow" filter="url(#f1)" />
</svg>

이렇게하면 SVG 이미지 자체에 그림자 효과를 포함시킬 수 있습니다.

2. Stack을 사용하여 그림자 레이어 추가

Flutter 앱에서 flutter_svg 위에 ContainerCard와 같은 위젯을 겹쳐서 사용하여 그림자 효과를 시각적으로 구현할 수 있습니다. 이를 위해 Stack 위젯을 사용하여 SVG 이미지와 그림자를 겹쳐 표시할 수 있습니다.

예시:

Stack(
  children: [
    SvgPicture.asset('assets/image.svg'),
    Container(
      decoration: BoxDecoration(
        boxShadow: [
          BoxShadow(
            color: Colors.black.withOpacity(0.2),
            spreadRadius: 5,
            blurRadius: 7,
            offset: Offset(0, 3),
          ),
        ],
      ),
    ),
  ],
)

이런 식으로 Stack을 사용하면 SVG 이미지 위에 그림자를 추가할 수 있습니다.

마무리

이제 flutter_svg를 사용하면서 SVG 이미지에 그림자 효과를 조절하는 방법을 알게 되었습니다. SVG 코드에 그림자를 직접 추가하거나, Flutter의 위젯을 활용하여 그림자를 겹쳐 표시하는 방법 등을 사용할 수 있습니다.