ListView 사용법과 주요 property
- 가장 일반적으로 사용되는 스크롤 위젯
- ListView는 주로 다음과 같은 방식으로 사용
- 일반적인 ListView를 명시적으로 호출하고 children 전달하는 방법 (적은 데이터에 사용시 용이함)
- ListView.builder를 사용하여 동적으로 호출
- ListView.separated는 ListView.builder 기능에 구분선 사용 가능
- 주요 property
- reverse: true이면 bottom에서부터 리스트 표시
- padding: 리스트 아이템 간격 (EdgeInsets로 적용)
- itemCount: 동적 리스트 아이템 개수 (ListView.builder/ListView.separated에서 사용 가능)
- itemBuilder: 각 동적 리스트 아이템 정의 (ListView.builder/ListView.separated에서 사용 가능)
- physics: 스크롤 방식 설정
ListTile
- Material Design의 리스트 스타일 따르는 위젯
- ListView와 함께 사용하여, 일반적인 스크롤을 지원하는 리스트 메뉴를 표현
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: ListView(
padding: EdgeInsets.all(10),
children: [
ListTile(
leading: CircleAvatar(
backgroundColor: Colors.amber,
child: Text('1'),
),
title: Text('Item1'),
subtitle: Text('Item description'),
trailing: IconButton(
icon: Icon(Icons.more_vert),
onPressed: () {
print('click');
},
),
),
// More ListTile items (2 to 6) as shown in the code
],
),
),
);
}
}
ListView.builder 사용 해보기
import 'package:flutter/material.dart';
void main() {
runApp(MyApp11());
}
class MyApp11 extends StatelessWidget {
const MyApp11({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
// ListView 안에 스크롤 뷰가 들어가 있다.
body: ListView.builder(
// 물리적인 스크롤 방식 -->
physics: ClampingScrollPhysics(),
itemCount: 20,
itemBuilder: (context, index) {
return ListTile(
leading: CircleAvatar(
backgroundColor: Colors.amber,
child: Text(index.toString()),
),
title: Text('Item $index'),
subtitle: Text('sub Item $index'),
);
},
),
),
);
}
}
ListView.separated 사용 해보기
import 'package:flutter/material.dart';
void main() {
runApp(MyApp12());
}
class MyApp12 extends StatelessWidget {
const MyApp12({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
// ListView 안에 스크롤 뷰가 들어가 있다.
body: ListView.separated(
// 물리적인 스크롤 방식 -->
physics: ClampingScrollPhysics(),
itemCount: 20,
itemBuilder: (context, index) {
return ListTile(
leading: CircleAvatar(
backgroundColor: Colors.amber,
child: Text(index.toString()),
),
title: Text('Item $index'),
subtitle: Text('sub Item $index'),
);
},
separatorBuilder: (context, index) {
return const Divider(
indent: 20.0,
endIndent: 20.0,
);
},
),
),
);
}
}
728x90
'Flutter' 카테고리의 다른 글
플러터 기본기 다지기 - 3 (PageView 위젯) (0) | 2024.11.14 |
---|---|
플러터 기본기 다지기 - 3 (GridView 위젯) (0) | 2024.11.14 |
플러터 기본기 다지기 - 3 (Form 위젯) (0) | 2024.11.13 |
플러터 기본기 다지기 - 2 (2) | 2024.11.12 |
SingleChildScrollView 위젯 (0) | 2024.11.07 |