[Flutter] 위젯(글자, 아이콘, 네모박스, 버튼)

2023. 9. 7. 14:56·Web & Android/Flutter

main.dart 파일에 stless라고 작성 후 Tab 키 누르면 위젯을 상속한 class가 생성됨 → 클래스 이름 작성해주기

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        
    );
  }
}

⇒ MaterialApp()을 사용하면 구글에서 제공하는 디자인을 사용할 수 있다.

  • Material Design을 사용하려면 아래와 같은 코드가 입력되어 있어야 함 → pubspec.yaml
flutter:
  uses-material-design: true

⇒ Cupertino~()를 사용하면 아이폰 관련 위젯 사용 가능하다.


위젯

글자 - Text(’글내용’)

MaterialApp(
  home: Text('안녕')
)

  • 글자 스타일의 색 변경
    • Colors.색
    • Color(0xffffffff) → 꼭 rgb 삽입 전 0xff를 넣어야 함
    • Color.fromRGBO()
    • Text( '글자임', style : TextStyle( color : Colors.red ) )
Text( '글자임', 
  style : TextStyle( color : Colors.red ) 
)

 

아이콘 - Icon(Icons.아이콘이름)

  • 아이콘 이름은 flutter 홈페이지에 있음
  • 컬러와 사이즈 변경 가능 → Icon(Icons.아이콘이름, 컬러 or 사이즈 )
MaterialApp(
  home: Icon(Icons.star)
)

이미지 - Image.asset(’경로’)

  • assets 폴터를 생성해서 이미지를 삽입하면 됨
  • 이미지 삽입 후 등록 먼저 해야함
    • pubspec.yaml 파일에 flutter 찾아서 assets: - assets/ 작성 → assets/ 는 이 파일 안에 있는 것을 모두 사용하겠다는 의미
      flutter:
        assets:
          - assets/
MaterialApp(
  home: Image.asset('assets/dog.png')
)

네모박스 - Container() or SizedBox()

  • SizedBox() → width, height, child만 필요한 박스의 경우 사용
  • Flutter의 사이즈 단위는 LP
  • 50LP == 1.2cm
  • 사이즈를 지정할 때는 어디서부터 어디까지 범위를 정해야한다.
// 크기 지정을 안해줘서 화면에서 안보임
MaterialApp(
  home: Container()
)

// 폭, 높이, 색상 적용 -> 컴퓨터가 박스를 어디서부터 가로세로를 그려야할지 모르기 때문에 안보임
MaterialApp(
  home: Container(width : 50, height : 50, color: Colors.blue)
)

// 좌표를 찍어줘야 폭, 높이, 색상이 적용됨
MaterialApp(
  home: Center( 
    child: Container(width : 50, height : 50, color: Colors.blue) 
  )
)

  • 박스에 여백주는 법
    • margin: EdgeInsets.all(20) or EdgeInsets.fromLTRB(0, 0, 0, 0)
    • padding: EdgeInsets.all(20) or EdgeInsets.fromLTRB(0, 0, 0, 0)
margin: EdgeInsets.all(30), 
padding: EdgeInsets.fromLTRB(10, 20, 30, 40),

 

  • decoration
    • 박스 테두리, 그림자, 박스 둥글게 등등 가능
    • decoration: BoxDecoration( border: Border.all(color: Colors.black))
    • 만약 decoration을 사용하는 경우엔 Container() 의 색을 지정해주고 싶은 경우 decoration 안에 지정해줘야 함
      - color, shape, boxShadow, gradient, image, borderRadius 등
MaterialApp(
  home: Scaffold(
    appBar: AppBar(title: Text('앱임')),
      body: Container(
        width: 50, height: 50,
          decoration: BoxDecoration(
            border: Border.all(color: Colors.black)
      ),
    ),
  )
)

// 이건 불가능 -> 에러 뜸
MaterialApp(
  home: Scaffold(
    appBar: AppBar(title: Text('앱임')),
      body: Container(
        width: 50, height: 50, color: Colors.blue,
          decoration: BoxDecoration(
					  color: Colors.blue,
            border: Border.all(color: Colors.black)
      ),
    ),
  )
)

박스 위치 정렬

  • 중앙 정렬
    - Center()로 Container() 감싸기
MaterialApp(
  home: Scaffold(
    appBar: AppBar(title: Text('앱임')),
    body: Center(
      child: Container(
        width: 50, height: 50, color: Colors.blue,
       ),
     ),
  )
)
  •  그외 정렬
    - Align()으로 Container() 감싸고 그 윗 줄에 alignmemt: Alignment.정렬방법 해주면 됨
MaterialApp(
  home: Scaffold(
    appBar: AppBar(title: Text('앱임')),
    body: Align (
      alignment: Alignment.bottomCenter,
      child: Container(
        width: 50, height: 50, color: Colors.blue,
      ),
    ),
  )
)

박스 너비 꽉차게

  • double.infinty 해주면 됨
Container( width : double.infinity, height : 50, color : Colors.blue )

 

버튼 아이콘 - TextButton(), IconButton(), ElevatedButton() 중 택1

  • child: 와 onPressed: 파라미터를 꼭 삽입해줘야 함
    • onPressed: → 버튼 눌렀을 때 실행해줄 코드(함수)
  • TextButton()

    TextButton( child: Text('글자'), onPressed: (){} )
  • IconButton()
    • 아이콘 버튼

    IconButton( icon: Icon(), onPressed: (){} )
  • ElevatedButton()
    • 버튼 배경색이 적용돼서 나오고 클릭 시 클릭 효과가 보여짐

  ElevatedButton( child: Text('글자'), onPressed: (){} )
  • Flexible() - Row() or Column() 안에 박스를 여러 개 배치할 때 백준율 단위로 주기
    Row(
      children : [
        Flexible( child: Container(color : Colors.blue), flex : 1 ),
        Flexible( child: Container(Color : Colors.green), flex : 1 )
      ]
    )
  • Expanded() - Row() or Column() 안에서 박스 하나만 꽉채우고 싶은 경우

글자 입력 - TextField()

  • TextField 양옆에 아이콘 넣고 싶으면 icon: 파라미터
    • icon: 파라미터 대신 prefixIcon:, suffixIcon: 이런 파라미터도 있다
TextField(
  decoration: InputDecoration(
    icon: Icon(Icons.star),
  ),
),
  • border 주려면 enabledBorder: 파라미터

TextField(
  decoration: InputDecoration(

    enabledBorder: OutlineInputBorder(
      borderSide: BorderSide(
        color: Colors.green,
        width: 1.0,
      ),
    ),

  ),
)
  • 커서찍혔을 때, 에러일 때 등 테두리를 변경하고 싶으면 enabledBorder: 뿐만 아니라 border:, focusedBorder:, disabledBorder:, errorBorder:, focusedErrorBorder: 이런 파라미터도 있다
  • border를 하단만 주려면
    • OutlineInputBorder() 위젯은 상하좌우 테두리를 주고
    • UnderlineInputBorder() 위젯은 하단 테두리만 주고
    • InputBorder.none 위젯 쓰면 테두리를 없애줌
    • 이 위젯들 안에서 border 두께, 색상 이런거 커스터마이징하면 된다
TextField(
  decoration: InputDecoration(
    enabledBorder: UnderlineInputBorder(),
  ),
),
  • 테두리 둥글게 하고 싶으면 borderRadius :

TextField(
  decoration: InputDecoration(

    enabledBorder: OutlineInputBorder(
      borderRadius: BorderRadius.circular(30),
    ),

  ),
),
  • border 없애기 & 배경색 입히기

TextField(
  decoration: InputDecoration(

    filled: true,
    fillColor: Colors.blue.shade100,
    enabledBorder: OutlineInputBorder(
      borderSide: BorderSide.none,
    )

  ),
),
  • 힌트 띄우기
    • 4개 중 원하는 것 골라서 사용
    • 스타일 주고 싶으면 hintStyle: TextStyle(color: Colors.green), 사용

TextField(
  decoration: InputDecoration(
    hintText: 'hint',
    helperText: 'helper',
    labelText: 'label',
    counterText: 'counter'
  ),
),
저작자표시 비영리 변경금지 (새창열림)

'Web & Android > Flutter' 카테고리의 다른 글

[Flutter] 버튼에 기능 부여하는 법  (0) 2023.09.12
[Flutter] 레이아웃 위젯  (0) 2023.09.12
[Flutter] Lint 관련 워닝 무시하는 법  (0) 2023.09.12
[Flutter] 안드로이드 스튜디오 Dart / Flutter 플러그인 설치  (0) 2023.09.06
[Flutter] Flutter SDK 설치  (0) 2023.09.06
'Web & Android/Flutter' 카테고리의 다른 글
  • [Flutter] 레이아웃 위젯
  • [Flutter] Lint 관련 워닝 무시하는 법
  • [Flutter] 안드로이드 스튜디오 Dart / Flutter 플러그인 설치
  • [Flutter] Flutter SDK 설치
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    데이터베이스
    programmers
    DB
    Flutter
    프로그래머스
    Spring Security
    Java
    플러터
    백준
    스프링 부트 쇼핑몰 프로젝트 with JPA
    spring
    스프링
    springboot
    CS
    스프링부트
    Oracle
    시큐리티
    데이터
    backjoon
    python
    CS지식
    리눅스마스터
    Linux
    JPA
    postgresql
    리눅스
    pcce 기출문제
    리눅스마스터 1급
    baekjoon
    자바
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[Flutter] 위젯(글자, 아이콘, 네모박스, 버튼)
상단으로

티스토리툴바