【Flutter】리스트내의 임베디드 리스트로 builder를 유효하게 한다
이 기사에서 해결하는 문제
중첩 목록(목록에 있는 목록)을 사용할 때 빌더가 제대로 작동하지 않습니다.
builder라면 화면에 보이는 부분만 생성되지만, 왠지 처음에 모두 생성되어 로드에 시간이 걸린다.
왜 작동하지 않는가?
부모가 스크롤 시스템 위젯이면 하위 목록이 독립적으로 스크롤되지 않도록 NeverScrollableScrollPhysics를 사용할 수 있습니다.
하지만, 이것을 사용하고 있으면 builder가 스크롤하고 있지 않은 판정이 되어, buider의 특징인 다이나믹한 로딩이 효과가 없기 때문에, 단번에 읽게 되어 버린다.
솔루션 및 사용 예
● CustomScrollView 사용
CustomScrollView를 대체하면 Sliver를 사용할 수 있습니다.
슬라이버는 스크롤할 수 있는 부모 위젯의 일부입니다.
이번에는 Slivers라는 이른바 블록과 같은 것을 조합하여 그것을 부모인 CustomScrollView라는 하나의 스크롤 가능한 위젯으로 만듭니다.
그리고 각 슬라이버는 빌더를 사용할 수 있습니다.
이하, 사용 예의 코드입니다.
CustomScrollView(
slivers: [
SliverList(
// Listの要素をbuilderでつくる
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) => Container(
margin: EdgeInsets.all(10),
height: 100,
color: Colors.amber,
child: Text('Item $index'),
),
childCount: 50, //list.lengthなどにする場合が多い
),
),
// Gridの場合 (Sliver内で複数のList, Gridを併用可能)
SliverGrid(
// 子Widgetの大きさや位置を設定
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200,
mainAxisSpacing: 10,
crossAxisSpacing: 10,
childAspectRatio: 4,
),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) => Container(
alignment: Alignment.center,
color: Colors.cyan,
child: Text('Item $index'),
),
childCount: 50,
),
),
],
);
이상, 참고가 되면 다행입니다.
Reference
이 문제에 관하여(【Flutter】리스트내의 임베디드 리스트로 builder를 유효하게 한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SLICKr/items/5f349d2057ddfe20b4ea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)