- 모두가 할 수 있는 플러터 UI 입문22024년 01월 09일 21시 52분 19초에 업로드 된 글입니다.작성자: sue24
lib/theme.dart
import 'package:flutter/material.dart'; ThemeData theme() { return ThemeData( primaryColor: Colors.white, appBarTheme: AppBarTheme( iconTheme: IconThemeData(color: Colors.blue), ) ) }- primaryColor: 브랜드의 아이덴티티
- accectColor: 앱의 상호작용 요소에 사용. 버튼, 링크 등 === secondaryColor
double.infinity: width나 height에 이 값을 쓰면 해당 위젯이 차지할 수 있는 최대 크기를 가진다
Scaffold.drawer,endDrawer
drawer는 Scaffold의 왼쪽 가장자리에서 오른쪽으로 슬라이드 하는 위젯
endDrawer는 Scaffold의 오른쪽 가장자리에서 왼쪽으로 슬라이드 하는 위젯
슬라이드로 보여줄 위젯을 drawer/endDrawer의 값으로 넣어준다
Scaffold(endDrawer: ProfileDrawer(), appBar: _buildProfileAppBar(), body: Column())
CircleAvatar
이미지를 둥글게 만들어준다
return SizedBox( width: 100, height: 100, child: CircleAvatar( backgroundImage: AssetImage("assets/avatar.png"), ), );위의 코드처럼 width, height 속성이 없는 위젯의 크기를 설정하려면
SizedBox 위젯으로 감싼다
이미지를 둥글게 만드는 방법
- Container.decoration
- ClipOver-Image
- CircleAvatar.backgroundImage
InkWell
모든 위젯을 버튼화시켜준다
터치에 반응하는 직사각형 영역
보통 Container로 디자인을 한 뒤 InkWell로 감쌈
onTap 속성으로 버튼 클릭 핸들러 설정
return InkWell( onTap: () { print("Button Clicked!"); }, child: Container( alignment: Alignment.center, width: 150, height: 45, child: Text("Follow", style: TextStyle(color: Colors.white)), decoration: BoxDecoration( color: Colors.blue, borderRadius: BorderRadius.circular(10), ) ) )버튼을 만드는 방법
- TextButton: 디자인이 없음. 그냥 Text를 클릭하는 효과
- ElevatedButton: elevation 효과로 아래와 오른쪽에 그림자가 생김
- OutlinedButton: 가장자리에 테두리 선
- InkWell: 모든 위젯을 버튼으로 만들어줄 수 있음
TabBar
TabBar: 탭의 가로 행 표시(Material)
TabBarView: 현재 선택된 탭에 해당하는 화면
controller에 TabController 객체를 연결해서 선택된 탭에 따라 화면을 변경함
class ProfileTab extends StatefulWidget{ @override _ProfileTabState createState() => _ProfileTabState(); } class _ProfileTabState extends State<ProfileTab> with SingleTickerProviderStateMixin { TabController? _tabController; @override void initState() { super.initState(); _tabController = new TabController(length: 2, vsync: this); } @override Widget build(BuildContext context) { return Column( children: [ _buildTabBar(), Expanded(child: _buildTabBarView()), ] ) } Widget _buildTabBar() { return TabBar( controller: _tabController, tabs: [ Tab(icon: Icon(Icons.directions_car)), Tab(icon: Icon(Icons.directions_transit)), ] ) } Widget _buildTabBarView() { return TabBarView( controller: _tabController, children: [ Container(color: Colors.green), Container(color: Colors.red), ] ) } }initState()
StatefulWidget에만 존재하는 초기화 함수
데이터 변경으로 다시 그림을 그릴 때는 호출되지 않음
vsync: this
해당 위젯의 싱크를 SingleTickerProviderStateMixin에 맞춘다는 뜻으로
SingleTickerProviderStateMixin은 내부적으로 AnimatedController 위젯으로 구현되어 있는데
현재 화면에 상태가 변경되면(tab을 클릭하면) 애니메이션이 발동디도록 싱크를 맞춘 것
SingleTickerProviderStateMixin
한 개의 애니메이션을 가진 위젯을 정의할 때 사용
애니메이션이 두 개 이상일 경우에는 TickerProviderStateMixin 사용
Mixin은 클래스가 가진 코드를 재사용하는 데 쓰인다
보통의 프로그래밍 언어는 다중 상속이 불가능해서 여러 클래스를 상속할 수 없지만
mixin 타입은 클래스가 아니기 때문에 클래스를 상속한 상태에서 여러 mixin을 상속할 수 있다
클래스 상속은 extends를 쓰지만
mixin 상속은 with를 쓴다
상속을 통해 타입 일치 및 함수의 재정의를 할 수 있다
Mixin은 is-A 관계: 사자는 동물이면서 뛰다에 속한다. 참새는 동물이면서 날다에 속한다
Composition은 has-A 관계: 사자는 동물이며 뛰다 기능을 가진다.
타입 일치: 런타임시 동적으로 다른 행동을 할 수 있는 프로그램을 짤 수 있다
GridView
수평 혹은 수직방향으로 고정된 수의 위젯을 생성하고 반복해서 List를 출력한다
GridView에 들어갈 Item의 양이 정해져 있다면 GridView
item 개수가 동적이라면 GridView.builder를 사용한다
crossAxisCount는 가로로 몇 개의 item을 넣을지를 나타낸다
GridView.builder( gridDelegate: SilverGridDelegateWithFixedCrossAxisCount( crossAxisSpacing: 10, crossAxisCount: 3, mainAxisSpacing: 10, ), itemCount: 42, itemBuilder: (context, index) { return Image.network("https://picsum.photos/id/${index + 1}/200/200"); } )Image.asset()은 내가 가진 asset 폴더 내부 사진의 path를 넣고
Image.network()는 이미지의 url 주소를 넣는다
'모바일 > Flutter' 카테고리의 다른 글
flutter package_info_plus (0) 2024.02.02 중첩된 다이얼로그 위에 스낵바 보여주기 (0) 2024.02.01 모두가 할 수 있는 플러터 UI 입문1 (1) 2024.01.08 [The Complete Flutter Development Bootcamp with Dart] 3 MiCard (1) 2024.01.05 Flutter에서 텍스트를 중앙에 배치하는 6가지 방법 (0) 2024.01.04 다음글이 없습니다.이전글이 없습니다.댓글