GridView.builder(
keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
itemCount: 20,
padding: const EdgeInsets.all(
Sizes.size10,
),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: Sizes.size10,
mainAxisSpacing: Sizes.size10,
childAspectRatio: 9 / 20,
),
itemBuilder: (context, index) => Column(
children: [
Container(
clipBehavior: Clip.hardEdge,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(Sizes.size4),
),
child: AspectRatio(
aspectRatio: 9 / 16,
child: FadeInImage.assetNetwork(
fit: BoxFit.cover,
placeholder: "assets/images/placeholder.jpg",
image:
"https://images.unsplash.com/photo-1673844969019-c99b0c933e90?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1480&q=80",
),
),
),
],
),
)
이 코드는 Flutter에서 GridView.builder
를 사용하여 그리드 형태의 리스트를 구성하는 방법을 보여줍니다. GridView.builder
는 그리드 내에 동적으로 위젯을 생성하여 표시하는데 사용되며, 다양한 매개변수를 통해 그리드의 레이아웃과 동작을 세밀하게 제어할 수 있습니다.
keyboardDismissBehavior: 사용자가 스크롤할 때 키보드를 어떻게 처리할지 결정합니다. ScrollViewKeyboardDismissBehavior.onDrag
는 사용자가 그리드를 드래그할 때 키보드가 자동으로 숨겨지도록 설정합니다.
itemCount: 그리드에 표시할 항목의 총 개수입니다. 여기서는 20개의 항목을 생성하도록 설정되어 있습니다.
padding: 그리드 전체에 적용될 패딩입니다. 여기서는 모든 방향에 Sizes.size10
의 패딩이 적용됩니다.
gridDelegate: 그리드의 레이아웃을 결정하는데 사용됩니다. SliverGridDelegateWithFixedCrossAxisCount
는 고정된 수의 열(cross axis count)을 가진 그리드 레이아웃을 생성합니다.
itemBuilder: 그리드의 각 항목을 어떻게 구성할지 결정하는 함수입니다. BuildContext
와 항목의 index
를 매개변수로 받아 Column
위젯을 반환합니다.
Container
는 이미지를 보여주는데 사용되며, Clip.hardEdge
와 BorderRadius
로 모서리를 둥글게 처리합니다.FadeInImage.assetNetwork
를 사용하여 네트워크 이미지와 플레이스홀더를 표시합니다.Text
는 설명을 표시하며, overflow
와 maxLines
로 텍스트의 표시 방식을 제어합니다.Row
는 사용자 프로필, 좋아요 아이콘 등을 수평으로 배치합니다.GridView.builder
는 보이는 부분의 위젯만을 렌더링하므로 대량의 데이터를 효율적으로 처리할 수 있습니다.itemBuilder
를 사용하여 각 항목을 동적으로 생성하고 커스터마이징할 수 있습니다.이러한 특성 덕분에 GridView.builder
는 이미지 갤러리, 제품 목록 등 다양한 그리드 기반의 UI를 구현하는 데 매우 적합합니다.
GridView.builder
는 Flutter에서 효율적으로 그리드 형식의 항목을 렌더링하는 위젯입니다. 이것은 목록과 유사하지만 그리드 형식으로 항목을 표시합니다. 아래는 위에서 제공된 GridView.builder
코드의 주요 부분에 대한 설명입니다:
keyboardDismissBehavior: 키보드가 열려 있을 때 사용자가 스크롤을 시작하면 키보드를 자동으로 닫습니다. 여기서는 ScrollViewKeyboardDismissBehavior.onDrag
가 사용되어 스크롤 시 키보드가 닫힙니다.
itemCount: 그리드에 표시되는 항목 수를 지정합니다. 이 경우 총 20개의 항목이 표시됩니다.
padding: 그리드의 전체 패딩을 설정합니다. 여기서는 모든 쪽에 Sizes.size10
만큼의 패딩이 추가됩니다.
gridDelegate: 그리드의 레이아웃을 조절하는 데 사용됩니다. SliverGridDelegateWithFixedCrossAxisCount
를 사용하여 다음과 같은 속성을 지정합니다:
Sizes.size10
으로 설정되어 있습니다.Sizes.size10
으로 설정되어 있습니다.itemBuilder: 실제 그리드 항목을 빌드하는 함수입니다. 이 함수는 현재의 BuildContext
와 항목의 인덱스를 인수로 받아 Widget
을 반환합니다.
Column
위젯으로 구성되어 있으며, 여기에는 비디오 이미지가 표시되는 Container
와 다른 정보(캡션, 사용자 아바타 등)가 포함됩니다.Container
에는 AspectRatio
위젯이 사용되어 9:16의 비율로 비디오 이미지를 표시합니다.FadeInImage.assetNetwork
위젯이 사용되어 이미지 로딩 시 페이드 인 효과와 함께 플레이스홀더 이미지를 표시합니다.이 GridView.builder
는 비디오 항목을 그리드 형식으로 표시하며, 각 항목은 이미지와 관련 정보로 구성되어 있습니다.
SliverGridDelegateWithFixedCrossAxisCount
는 Flutter에서 그리드 레이아웃을 생성하는 데 사용되는 위젯입니다. 그리드 레이아웃은 주로 GridView
나 그와 관련된 위젯에서 사용됩니다.
SliverGridDelegateWithFixedCrossAxisCount
의 주요 특징은 고정된 수의 열(cross-axis count)을 가진 그리드를 생성한다는 것입니다. 여기에는 여러 설정을 지정할 수 있어 그리드의 동작과 모양을 정밀하게 조절할 수 있습니다.
주요 속성들은 다음과 같습니다:
crossAxisCount:
crossAxisCount: 2
는 두 개의 열을 가진 그리드를 만듭니다.mainAxisSpacing:
crossAxisSpacing:
childAspectRatio:
childAspectRatio: 0.5
는 항목의 너비가 높이의 절반일 것임을 의미합니다.maxCrossAxisExtent (이것은 SliverGridDelegateWithFixedCrossAxisCount
에는 없고 SliverGridDelegateWithMaxCrossAxisExtent
에 있습니다.):
예를 들어, 만약 두 개의 열과 각 항목 사이에 8의 간격을 원한다면 다음과 같이 작성할 수 있습니다:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 8,
crossAxisSpacing: 8,
)
이 위젯은 그리드 레이아웃의 유연성과 조절 가능성을 제공하여 사용자의 요구에 따라 다양한 그리드 스타일을 만들 수 있습니다.
SliverGridDelegateWithFixedCrossAxisCount
는 Flutter에서 그리드 뷰를 레이아웃하는 데 사용되는 위젯 중 하나입니다. 이 위젯을 사용하면 격자의 가로축(cross axis)에 있는 항목의 수를 고정하고, 그에 따라 각 항목의 크기와 간격을 조절할 수 있습니다.
아래는 SliverGridDelegateWithFixedCrossAxisCount
의 주요 속성들에 대한 설명입니다:
crossAxisCount: 이 속성은 격자의 가로축에 있는 항목의 수를 지정합니다. 예를 들어, crossAxisCount: 2
는 두 개의 항목이 가로축에 배치되도록 합니다.
mainAxisSpacing: 세로축(main axis)에 있는 항목 사이의 간격을 지정합니다. 이 값은 항목과 항목 사이의 세로 간격을 픽셀 단위로 정의합니다.
crossAxisSpacing: 가로축(cross axis)에 있는 항목 사이의 간격을 지정합니다. 이 값은 항목과 항목 사이의 가로 간격을 픽셀 단위로 정의합니다.
childAspectRatio: 격자의 각 항목의 너비 대 높이 비율을 지정합니다. 예를 들어, childAspectRatio: 1.0
은 각 항목이 정사각형이 되도록 합니다. childAspectRatio: 2.0
은 항목의 너비가 높이의 두 배가 되도록 합니다.
SliverGridDelegateWithFixedCrossAxisCount
를 사용하면 격자 레이아웃의 외관과 동작을 세밀하게 제어할 수 있습니다. 예를 들어, 여러분이 3x3, 4x4 등의 격자 레이아웃을 만들고 싶을 때 이 위젯을 활용할 수 있습니다.