Coaspe

Flutter - Material class 본문

Flutter/API

Flutter - Material class

Coaspe 2023. 2. 17. 13:59

A piece of material

 

Material 위젯은 다음과 같은 역할을 수행합니다.

  1. Clipping: clipBehaviorClip.none으로 설정되어있지 않다면, Material은 shapetype, 그리고 borderRadius으로 구체화되어있는 shape으로 위젯 sub-tree를 clip합니다. 디폴트로 성능을 고려하여 clipBehaviorClip.none으로 설정됩니다. Clipping이 어떤 효과를 미치는지 예시로 확인하고 싶다면 Ink 위젯을 참고하세요.
  2. Elevation: Material은 elevation pixels을 사용하여 자신의 위젯 sub-tree를 elevates 하고 적절한 그림자를 그립니다.
  3. Ink 효과: Material은 InkSplash InkHighlight 처럼 InkFeatures로 구현된 ink 효과를 자식의 아래에 추가합니다.

The Material Metaphor

Material은 Material Design의 중심이 되는 메타포입니다. 각 material의 조각들은 주어진 elevation에 나타나고, 이는 해당 material 조각이 다른 material 조각과 시각적으로 어떻게 관련되는지, 그리고 그 material이 그림자를 드리우는지에 영향을 미칩니다.

 

대부분의 UI 요소들은 개념적으로 material 조각 위에 프린트 되거나 스스로가 material로 만들어집니다. Material은 InkSplash  InkHighlight 효과를 사용하여 유저의 입력에 반응합니다. Material에 반응을 트리거하고 싶다면 Material.of로 접근이 가능한 MaterialInkController를 사용하세요.

 

일반적으로,  Material의 피쳐들은 시간이 지나도 바뀌면 안됩니다.(e.g. MaterialcolorshadowColor or type은 바뀌면 안 됩니다.). elevationshadowColor 그리고 surfaceTintColor의 변화는 animationDuration 동안 애니메이션으로 표시됩니다. Shape의 type MaterialType.transparency이 아닐 때 shape의 변화가 애니메이트되고, 이전과 다음 shape 값 사이의 ShapeBorder.lerp가 지원됩니다. Shape의 변화 또한 animationDuration 동안 애니메이션으로 표시됩니다.

 

Shape

Material의 shape은 shapetype, 그리고 borderRadius에 의해 결정됩니다.

 

Border

Shape이 null이 아니라면, border도 페인트 될 것입니다 (있는 경우에).

 

Layout change notifications

Layout이 변화하면(e.g. material에 list가 있고, 해당 list가 스크롤 되는 것), LayoutChangedNotification가 연관된 서브트리에 디스패치 되어야만 합니다. 이는 특히 InkResponses, InkWells, Inks나 InkFeature 메커니즘을 사용하는 다른 위젯을 포함하는 서브 트리를 이동하기 위해 트렌지션(e.g. SlideTransition)을 material 위젯 내부에 배치해서는 안 된다는 것을 의미합니다. 그렇지 않으면 진행 중인 ink 피쳐들(e.g. ink splashes and ink highlights)이 새 레이아웃으로 이동하지 않습니다.

 

Painting over the material

Material 위젯들은 종종 자신의 가장 가까운 material 조상에게 반응을 트리거합니다. 예를 들면, ListTile.hoverColor은 포인터가 자신을 hovering하면 타일의 material에게 반응을 트리거합니다. 이런 반응들과 material 사이에 있는 위젯이 material을 가리는 방식으로 페인트될 경우 이런한 반응들은 가려집니다. (DecoratedBoxBoxDecoration.color을 설정하는 것 같은 경우). 이런 행동을 피하고 싶다면, material이 스스로를 decorate 할 수 있게 InkDecoration을 사용하세요.

 

See also:

 

Inheritance

 

Constructors

Material({

Key? key, 

MaterialType type = MaterialType.canvas, 

double elevation = 0.0, 

Color? color, 

Color? shadowColor, 

Color? surfaceTintColor, 

TextStyle? textStyle, 

BorderRadiusGeometry? borderRadius, 

ShapeBorder? shape, 

bool borderOnForeground = true, 

Clip clipBehavior = Clip.none, 

Duration animationDuration = kThemeChangeDuration, 

Widget? child

})

'Flutter > API' 카테고리의 다른 글

Flutter/API - InkWell  (0) 2023.02.17
Flutter - Image BoxFit  (0) 2023.02.17
Flutter - Stack class  (0) 2023.02.17
Flutter - findAncestorStateOfType method  (0) 2023.02.17
Flutter - Navigator class  (0) 2023.02.17
Comments