Flutter Scaffold란?

Ruinak·2021년 9월 24일
0

Flutter

목록 보기
2/12
post-thumbnail

새로운 프로젝트 생성

  • File - New - New Flutter Project 선택합니다.
  • SDK 경로를 지정해줍니다.
  • 프로젝트의 이름, 위치, 언어, 플랫폼을 선택해줍니다.
  • 프로젝트가 생성이 되고 나면 AVD Manager를 열어서 Device를 생성해줍니다.
  • Pixel 3에 최신버전(R)으로 만들어주고, 프로젝트를 실행해봅니다.
  • 프로젝트가 잘 실행됨을 확인한 후 코드의 7번줄부터 삭제를 해줍니다.
  • Ctrl + W를 이용하면 블럭으로 영역을 찾을 수 있습니다.

기능 둘러보기

Container

void main() {
  runApp(FirstApp());
}

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

  @override
  Widget build(BuildContext context) {
    // Container 는 컨테이너라는 클래스입니다.
    // HTML 에서의 div 로 생각하면 됩니다.
    // 즉 빈박스입니다.
    return Container(
    	color: Colors.amberAccent,
    );
  }
}

  • st를 입력하면 자동완성에 나타나는 stateless를 선택하면 자동으로 class를 만들어줍니다.
  • class 이름을 FirstApp으로 한 뒤 main 함수 안에 runApp(FirstApp());을 입력 해줍니다.
  • 프로젝트를 다시 실행하면 AVD의 화면이 검게 변합니다.
  • Container는 컨테이너라는 클래스입니다.
  • 명령어 color와 Colors를 이용해 배경색을 지정할 수 있습니다.
  • HTML에서의 div로 생각하면 되므로, 즉 빈박스를 의미합니다.

MaterialApp

import 'package:flutter/material.dart';

void main() {
  runApp(FirstApp());
}

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

  @override
  Widget build(BuildContext context) {
    // MaterialApp 은 AndroidApp 을 만든다는 뜻입니다.
    return MaterialApp(
      // Scaffold 는 기본 구조를 들고 있다는 뜻입니다.
      home: SafeArea(
        child: Scaffold(
          body: Text("Hello"),
        ),
      ),
    );
  }
}
  • MaterialApp은 'AndroidApp을 만든다'는 뜻입니다.
  • Scaffold는 '기본 구조를 들고 있다'는 뜻입니다.
  • Scaffold에서 Alt + Enter를 누르면 위와 같은 창이 나타납니다.
  • widget을 선택한 후 SafeArea로 바꿔주면 AVD의 핸드폰 상태창 아래쪽에 hello가 출력됩니다.
  • 저장을 하면 화면이 바로 갱신되는 핫 리로드가 적용되어 있습니다.

최종 코드

// ignore_for_file: prefer_const_literals_to_create_immutables, 
			prefer_const_constructors
import 'dart:io';

import 'package:flutter/material.dart';

// Flutter App의 가장 기본적인 형태가 flutter_first

// main스레드는 runApp을 실행시키고 종료됩니다.
void main() {
  // 비동기로 실행됨(이벤트 루프에 등록된다)
  runApp(FirstApp());
  sleep(Duration(seconds: 2));
  print("main 종료");
}

// 저장만하면 화면이 리로드됨. 핫 리로드(위쪽 아이콘의 번개모양)
class FirstApp extends StatelessWidget {
  const FirstApp({Key? key}) : super(key: key);

  // UI가 조금만 변경되도 아래 build 메서드만 재실행됩니다.
  @override
  Widget build(BuildContext context) {
    // MaterialApp은 AndroidApp을 만든다는 뜻입니다.
    // CupertinoApp은 iosApp을 만든다는 뜻입니다.
    return MaterialApp(
      home: SafeArea(
        // Scaffold는 기본 구조를 들고 있다는 뜻입니다.
        child: Scaffold(
          // 기본 구조 1. AppBar
          appBar: AppBar(
            backgroundColor: Colors.blueAccent,
            title: Text("First App"),
            leading: Icon(Icons.menu),
          ),
          // 기본 구조 2. body
          body: Text("Hello~~!"),
          // 기본 구조 3. floatingActionButton
          floatingActionButton: FloatingActionButton(
            child: Text("Button"),
            onPressed: () {
              print("버튼 클릭됨");
            },
          ),
          // 기본 구조 4. bottomNavigationBar
          bottomNavigationBar: BottomNavigationBar(
            items: [
              BottomNavigationBarItem(
                  label: "hello", icon: Icon(Icons.access_alarm_rounded)),
              BottomNavigationBarItem(
                  label: "hello", icon: Icon(Icons.access_alarm_rounded))
            ],
            backgroundColor: Colors.yellow,
          ),
        ),
      ),
    );
  }
}
profile
Nil Desperandum <절대 절망하지 마라>

0개의 댓글