Flutter Reference
Flutter 프레임워크 레퍼런스
Flutter Reference 소개
Flutter 레퍼런스는 Google의 Flutter 프레임워크와 Dart 프로그래밍 언어로 iOS, Android, 웹 애플리케이션을 구축하는 모바일 및 크로스플랫폼 개발자를 위한 실용적인 치트 시트입니다. Flutter 개발의 6가지 핵심 범주를 다룹니다: 자주 사용하는 UI 위젯(Text, ElevatedButton, Image.network, TextField, ListView.builder), 레이아웃 위젯(Column, Row, Container, Expanded/Flexible, Stack), 상태 관리 방식(setState를 사용하는 StatefulWidget, ChangeNotifier를 사용하는 Provider, Riverpod StateProvider), 네비게이션 패턴(Navigator.push/pop, 명명된 라우트, GoRouter 선언적 라우팅), 애니메이션 위젯(AnimatedContainer, Tween을 사용하는 AnimationController, Hero 전환, FadeTransition), 플랫폼 통합(플랫폼 감지, 네이티브 코드를 위한 MethodChannel, 빌드 명령어).
이 레퍼런스는 프로덕션 Flutter 앱을 개발하는 모바일 개발자, 단일 코드베이스에서 Android, iOS, 웹으로 크로스 컴파일하는 개발자, React Native 또는 네이티브 Android/iOS 개발에서 마이그레이션하는 개발자가 활용합니다. itemCount와 itemBuilder가 있는 ListView.builder부터 GoRouter 경로 파라미터, AnimationController.forward()부터 배터리 수준 접근을 위한 MethodChannel.invokeMethod()까지 실제 예제와 함께 정확한 Dart 위젯 생성자와 메서드 호출을 제공합니다.
레퍼런스는 6가지 카테고리로 구성됩니다: 위젯(TextStyle이 있는 Text, onPressed가 있는 ElevatedButton, BoxFit이 있는 Image.network, InputDecoration과 TextEditingController가 있는 TextField, 동적 리스트를 위한 ListView.builder), 레이아웃(mainAxisAlignment가 있는 Column, spaceEvenly가 있는 Row, BoxDecoration과 borderRadius가 있는 Container, flex 비율이 있는 Expanded, Positioned 오버레이가 있는 Stack), 상태관리(createState와 setState가 있는 StatefulWidget, ChangeNotifier와 notifyListeners가 있는 Provider, Consumer와 ref.watch가 있는 Riverpod StateProvider), 네비게이션(MaterialPageRoute가 있는 Navigator.push, 결과 데이터가 있는 pop, arguments가 있는 pushNamed, 경로 파라미터가 있는 GoRouter), 애니메이션(duration과 Curves가 있는 AnimatedContainer, Tween과 forward()가 있는 AnimationController, Hero 공유 요소 전환, FadeTransition), 플랫폼(Platform.isAndroid/isIOS, 네이티브 API 호출을 위한 MethodChannel, flutter build apk/ios/web 명령어).
주요 기능
- Text, ElevatedButton, Image.network, TextField, ListView.builder 위젯 생성자와 주요 파라미터
- Column, Row, BoxDecoration이 있는 Container, Expanded flex 비율, Positioned 오버레이가 있는 Stack
- StatefulWidget과 setState 패턴, 앱 전체 상태를 위한 Provider/ChangeNotifier
- ConsumerWidget과 ref.watch를 사용하는 반응형 상태 접근을 위한 Riverpod StateProvider
- Navigator.push/pop, pushNamed arguments 명명된 라우트, GoRouter 경로 파라미터
- 암묵적 애니메이션이 있는 AnimatedContainer, Tween과 커브 제어가 있는 AnimationController
- 일치하는 태그 값으로 화면 간 공유 요소 전환하는 Hero 애니메이션
- 네이티브 Android/iOS API 호출을 위한 MethodChannel과 flutter build 릴리스 명령어
자주 묻는 질문
Flutter란 무엇이고 어떤 플랫폼을 지원하나요?
Flutter는 단일 Dart 코드베이스에서 네이티브 컴파일 애플리케이션을 구축하기 위한 Google의 오픈소스 UI 툴킷입니다. Android, iOS, 웹(WebAssembly와 JavaScript), Windows, macOS, Linux를 지원합니다. Flutter는 플랫폼 UI 컴포넌트에 의존하는 대신 Skia/Impeller 그래픽 엔진을 사용하여 자체 UI를 렌더링하므로 플랫폼 간 픽셀 퍼펙트 일관성을 보장합니다. 핫 리로드로 빠른 개발 사이클 덕분에 특히 모바일 개발에서 인기가 높습니다.
StatelessWidget과 StatefulWidget의 차이는 무엇인가요?
StatelessWidget은 불변입니다. build() 메서드는 생성자 파라미터에만 의존하며 생성 후 변경되지 않습니다. Text 레이블이나 아이콘 같은 순수 표시 위젯에 사용합니다. StatefulWidget은 변경 가능한 데이터를 보유할 수 있는 별도의 State 객체를 가집니다. setState(() { ... })를 호출하면 Flutter가 위젯을 더티로 표시하고 업데이트된 상태로 build()를 다시 호출합니다. 폼, 카운터, 토글, 로딩 상태 등 인터랙티브한 요소에 StatefulWidget을 사용하세요.
상태 관리에 Provider와 Riverpod 중 언제 무엇을 사용해야 하나요?
Provider는 Google이 권장하는 기존 상태 관리 솔루션입니다. InheritedWidget을 기반으로 하며 위젯 트리와 잘 통합됩니다. Riverpod은 같은 저자가 Provider의 한계를 극복하기 위해 완전히 다시 작성한 것으로, BuildContext 없이 상태를 읽을 수 있고, 비동기 프로바이더를 지원하며, 우발적인 상태 스코핑 오류를 방지합니다. 새 프로젝트에는 Riverpod을 권장합니다. 더 단순하고 익숙한 패턴을 선호한다면 Provider도 여전히 좋은 선택입니다.
Flutter에서 GoRouter는 네비게이션에 어떻게 작동하나요?
GoRouter는 URL 기반 라우팅을 사용하는 Flutter용 선언적 라우터 패키지입니다. path와 builder 속성이 있는 GoRoute 객체 목록으로 라우트를 정의합니다. 경로는 "/detail/:id" 같은 파라미터를 포함할 수 있으며 state.pathParameters["id"]로 접근합니다. 현재 라우트를 대체하는 네비게이션에는 context.go("/path")를, 스택에 푸시하려면 context.push("/path")를 사용합니다. GoRouter는 딥 링크, 리다이렉션, 중첩 네비게이션을 즉시 처리합니다.
Flutter에서 AnimationController는 어떻게 작동하나요?
AnimationController는 지정된 duration 동안 0.0에서 1.0 사이(또는 사용자 정의 범위)에서 애니메이션을 앞뒤로 구동합니다. State 클래스에 SingleTickerProviderStateMixin을 추가하고 vsync: this로 컨트롤러를 초기화하여 화면의 새로 고침 속도와 동기화합니다. Tween<double>(begin: 0, end: 1).animate(_controller)를 사용하여 0~1 범위를 실제 값에 매핑합니다. _controller.forward()로 재생하고, _controller.reverse()로 역방향 재생하며, State의 dispose() 메서드에서 항상 _controller.dispose()를 호출하세요.
Hero 애니메이션이란 무엇이고 어떻게 구현하나요?
Hero 애니메이션은 네비게이션 중에 위젯이 첫 번째 화면의 위치에서 두 번째 화면의 위치로 "날아가는" 것처럼 보이는 부드러운 전환을 만듭니다. 동일한 문자열 태그 값을 사용하여 두 화면 모두에서 동일한 위젯을 Hero(tag: "uniqueTag", child: ...)로 감쌉니다. Navigator.push()로 화면 간에 이동하면 Flutter가 자동으로 위젯을 두 위치 사이에서 애니메이션합니다. 두 화면을 개념적으로 연결하는 이미지, 아바타 또는 요소에 사용하세요.
Flutter에서 네이티브 Android 또는 iOS 코드를 호출하는 방법은?
MethodChannel을 사용하여 Dart와 플랫폼 사이에 명명된 채널을 설정합니다. Dart에서 고유한 이름으로 MethodChannel을 생성하고 platform.invokeMethod("methodName", args)를 호출합니다. Android(Kotlin/Java)에서는 configureFlutterEngine을 재정의하고 동일한 채널 이름에 MethodCallHandler를 설정합니다. iOS(Swift/ObjC)에서는 AppDelegate에서 동일한 이름으로 FlutterMethodChannel을 사용합니다. 채널은 메시지 전달 프로토콜을 사용하여 메서드를 비동기적으로 호출하고 결과를 반환합니다.
Flutter에서 Column과 ListView의 차이는 무엇인가요?
Column은 고정된 자식 목록을 세로로 배치합니다. 스크롤되지 않으며 자식이 가용 높이를 초과하면 오버플로우 오류가 발생합니다. 빌드 시점에 항목 수를 알고 있고 화면에 맞는 경우 Column을 사용하세요. ListView는 자식을 세로로 스크롤하며 동적이거나 큰 목록에 더 메모리 효율적입니다. 수백 개의 항목이 있을 수 있는 큰 목록의 경우 현재 표시되는 위젯만 구성하여 스크롤 시 항목을 느리게 빌드하는 ListView.builder()를 사용하세요.