NOTE!
이 문서는 Flutter.io의 문서를 한글로 번역한 문서입니다. 원문 바로가기

다음 페이지들로부터 Flutter 프레임워크에 대해 더 배워볼 수 있습니다:

Flutter 기본

이미 알고 있는 지식 적용하기

그 외 리소스들

행복한 Flutter 개발하세요!

NOTE!
이 문서는 Flutter.io의 문서를 한글로 번역한 문서입니다. 원문 바로가기

소개

Flutter는 iOS와 Android에서 고 수준의 Native 인터페이스를 만들 수 있는 구글의 모바일 SDK입니다. Flutter는 전 세계의 개발자와 조직에서 사용되는 기존 코드와 함께 작동하고, 무료이며 오픈 소스입니다.

이번 코드 실습에서는, 상호작용 기능이 포함된 기본적인 Flutter App을 확장해 볼 예정입니다. 두 번째 페이지(경로라고 불리는)를 만들고 사용자는 해당 페이지로 이동할 수 있습니다. 마지막으로 App의 컬러 테마를 변경합니다. 이 코드 실습은 part 1을 확장하지만 part 2에서 바로 시작하기를 원하는 사용자를 위해 시작 코드를 제공합니다.

part2에서 배우는 것들

  • iOS와 Android에서 자연스럽게 보이는 Flutter App 만들기
  • 빠른 개발 사이클을 위해 핫 리로드 사용하기
  • 상태 저장 위젯에 상호작용 기능을 추가하는 방법
  • 두 번째 화면을 만들고 이동하는 방법
  • App의 테마를 변경하는 방법

part2에서 만드는 것

스타트업 회사를 위해 끝없이 이름을 생성해 주는 간단한 모바일 앱을 만드는 것으로 시작합니다. 이번 코드 실습 이후에, 사용자는 이름을 선택하거나 선택해제하면서 최상의 이름을 찾아 저장할 수 있습니다. 우측 상단의 리스트 아이콘을 탭하면 즐겨찾기된 이름 리스트가 있는 새로운 페이지로 이동합니다.

아래 GIT는 완성된 App의 작동 방식을 보여줍니다.

이미지1

Flutter 환경 설정

part1을 완료하지 않았다면 part1 문서에 있는 Flutter 환셩 설정 부분을 참고해서 Flutter 개발환경을 설정합니다.

시작 App 구하기

part1을 수행해서 이미 startup_namer이름을 갖는 시작 App을 만든 경우 다음 단계를 수행합니다.
startup_namer App이 없을 경우 다음 안내를 따라 주세요.

  1. 첫 번째 Flutter App 만들기문서를 보고 간단한 Flutter App을 만드세요. 프로젝트 이름은 startup_namer로 합니다.
  2. lib/main.dart 파일의 내용을 모두 삭제하세요. 스타트업 이름을 제안하는 지연된 로딩 기능과 무한 출력 기능을 구현한 이 파일의 내용으로 다시 작성합니다.
  3. English Words 패키지를 추가하기 위해서 pubspec.yaml 파일을 다음과 같이 수정하세요.
dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2
  english_words: ^3.1.0    // Add this line.

English Words 패키지는 랜덤하게 단어 쌍을 생성해서 스타트업 이름을 제안해 줍니다.

  1. Android Studio의 편집 뷰에서 pubspec을 보는 동안 우측 상단의 Packages get을 클릭합니다. 콘솔에서 다음과 같은 내용을 볼 수 있습니다:
flutter packages get
Running "flutter packages get" in startup_namer...
Process finished with exit code 0
  1. app을 실행합니다. 원하는 만큼 스크롤을 하면 스타트업 이름이 계속해서 생성되어 출력되는 것을 볼 수 있습니다.

리스트에 아이콘 추가하기

이번 단계에서, 각 로우에 하트 아이콘을 추가합니다. 그 다음에는 해당 아이콘을 탭해서 즐겨찾기할 수 있는 코드를 작성합니다.

  1. RandomWordsState클래스에 _saved Set을 추가합니다. 이 Set에는 사용자가 즐겨찾기한 단어 쌍을 저장합니다. Set은 중복된 요소를 허용하지 않으므로 List보다 낫습니다.
class RandomWordsState extends State<RandomWords> {
  final List<WordPair> _suggestions = <WordPair>[];
  final Set<WordPair> _saved = Set<WordPair>();   // Add this line.
  final TextStyle _biggerFont = TextStyle(fontSize: 18.0);
  ...
}
  1. _buildRow 함수에서, 단어 쌍이 아직 저장되지 않았는지 검사하기 위해 alreadySaved 변수를 추가합니다.
Widget _buildRow(WordPair pair) {
  final bool alreadySaved = _saved.contains(pair);  // Add this line.
  ...
}

_buildRow 함수에서 즐겨찾기 기능을 추가하기 위해 ListTile 객체에 하트모양의 아이콘을 추가합니다. 다음으로는 하트 아이콘과 상호작용할 수 있는 기능을 추가합니다.

  1. 다음과 같이 아이콘을 추가합니다:
Widget _buildRow(WordPair pair) {
  final bool alreadySaved = _saved.contains(pair);
  return ListTile(
    title: Text(
      pair.asPascalCase,
      style: _biggerFont,
    ),
    trailing: Icon(   // Add the lines from here...
      alreadySaved ? Icons.favorite : Icons.favorite_border,
      color: alreadySaved ? Colors.red : null,
    ),                // ... to here.
  );
}
  1. 핫 리로드를 하면 각 로우에 열린 하트를 확인할 수 있습니다. 아직 상호작용 기능은 동작하지 않습니다.

이미지1이미지2

문제가 있나요?

App이 정확히 동작하지 않을 경우, 다음 링크의 코드와 비교해 볼 수 있습니다.

상호작용 기능 추가

이번 단계에서는, 하트 아이콘을 탭할 수 있도록 만듭니다. 사용자가 리스트의 요소를 탭하면 즐겨찾기 상태가 토글되면서 즐겨찾기 저장소에 저장되거나 리스트에서 삭제됩니다.

이렇게 구현하기 위해, _buildRow 함수를 수정해야 합니다. 단어 쌍이 이미 즐겨찾기 저장소에 추가되어있다면 삭제합니다. 타일(List Tile)을 탭할 때 마다 상태가 변경되었음을 프레임워크에 알리기 위해 setState() 함수가 호출됩니다.

  1. onTap 함수를 다음과 같이 추가합니다:
Widget _buildRow(WordPair pair) {
  final alreadySaved = _saved.contains(pair);
  return ListTile(
    title: Text(
      pair.asPascalCase,
      style: _biggerFont,
    ),
    trailing: Icon(
      alreadySaved ? Icons.favorite : Icons.favorite_border,
      color: alreadySaved ? Colors.red : null,
    ),
    onTap: () {      // Add 9 lines from here...
      setState(() {
        if (alreadySaved) {
          _saved.remove(pair);
        } else {
          _saved.add(pair);
        }
      });
    },               // ... to here.
  );
}

TIP Flutter의 반응형 스타일 프레임워크에서 setState()를 호출하면 State 객체의 build() 메서드가 호출되고 그 결과로 UI를 갱신하게 됩니다.

App을 핫 리로드합니다. 즐겨찾기 표시를 하거나 해제하기 위해 아무 타일이나 탭을 해 봅니다. 타일을 탭하면 해당 지점에서 잉크 번짐 애니메이션이 생성됩니다.

이미지3이미지4

문제가 있나요?

App이 정확히 동작하지 않을 경우, 다음 링크의 코드와 비교해 볼 수 있습니다.

새로운 화면으로 이동하기

이번 단계에서는, 즐겨찾기 표시한 단어 쌍만 출력하는 새로운 페이지(Flutter에서 경로-route-라고 불리우는)를 추가합니다. 이번 단계를 통해 홈 경로와 새로운 경로(route)사이를 이동하는 방법에 대해 배우게 됩니다.

Flutter에서는 Navigator가 App의 경로들이 포함된 스택을 관리합니다. Navigator의 스택에 경로를 추가하면 해당 경로가 출력됩니다. Navigator 스택에서 경로를 빼내면 이전 경로가 출력됩니다.

다음으로, RandomWordsState에 있는 build 메서드에서 AppBar에 리스트 아이콘을 추가합니다. 사용자가 리스트 아이콘을 클릭하면 즐겨찾기 표시한 단어 쌍을 포함한 새로운 경로가 Navigator에 추가되고 아이콘이 출력됩니다.

class RandomWordsState extends State<RandomWords> {
  ...
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Startup Name Generator'),
        actions: <Widget>[      // Add 3 lines from here...
          IconButton(icon: Icon(Icons.list), onPressed: _pushSaved),
        ],                      // ... to here.
      ),
      body: _buildSuggestions(),
    );
  }
  ...
}

TIP 단일 자식 위젯(child)을 갖는 위젯도 있고, 여러 자식 위젯(children)을 갖는 위젯도 있습니다. 여러 자식 위젯을 정의할 때는 대괄호([])로 배열을 표현합니다.

  1. RandomWordsState 클래스에 _pushSaved() 함수를 추가합니다.
void _pushSaved() {
}
  1. App을 핫 리로드합니다. App Bar에 리스트 아이콘이 출력됩니다. 이 아이콘을 탭해도 아직은 아무런 동작도 하지 않습니다.

다음에는, Navigator 스택에 경로를 추가합니다. 이 행위에 의해 새로운 화면으로 이동하게 됩니다. 새로운 페이지에 포함된 컨텐츠는 MaterialPageRoute의 익명함수인 builder 속성에서 만들어집니다.

  1. 아래 코드와 같이 Navigator.push를 호출하면, Navigator의 스택에 새로운 경로가 추가됩니다. IDE는 코드에 문제가 있다고 출력하겠지만 곧 작동하는 코드를 추가하게 될 겁니다.
void _pushSaved() {
  Navigator.of(context).push(
  );
}

다음으로, MaterialPageRoute와 builder를 추가해야 합니다. 우선 지금은 ListTile 로우를 생성하는 코드를 작성합니다. ListTile의 divideTiles() 메서드는 ListTile간 수평 여백을 추가합니다. divided 변수는 toList() 함수에 의해 리스트로 변환된 마지막 로우들을 보관합니다.

  1. 아래 코드를 추가하세요:
void _pushSaved() {
  Navigator.of(context).push(
    MaterialPageRoute<void>(   // Add 20 lines from here...
      builder: (BuildContext context) {
        final Iterable<ListTile> tiles = _saved.map(
          (WordPair pair) {
            return ListTile(
              title: Text(
                pair.asPascalCase,
                style: _biggerFont,
              ),
            );
          },
        );
        final List<Widget> divided = ListTile
          .divideTiles(
            context: context,
            tiles: tiles,
          )
          .toList();
      },
    ),                       // ... to here.
  );
}

builder 속성은 새로운 경로에 "Saved Suggestions - 저장된 제안들"이란 이름의 App Bar를 포함하는 Scaffold를 반환합니다. 새로운 경로는 ListTiles 로우를 포함하는 ListView로 구성되며 각 로는 구분선으로 분리됩니다.

  1. 아래 코드와 같이 수평 구분선을 추가합니다:
void _pushSaved() {
  Navigator.of(context).push(
    MaterialPageRoute<void>(
      builder: (BuildContext context) {
        final Iterable<ListTile> tiles = _saved.map(
          (WordPair pair) {
            return ListTile(
              title: Text(
                pair.asPascalCase,
                style: _biggerFont,
              ),
            );
          },
        );
        final List<Widget> divided = ListTile
          .divideTiles(
            context: context,
            tiles: tiles,
          )
              .toList();

        return Scaffold(         // Add 6 lines from here...
          appBar: AppBar(
            title: Text('Saved Suggestions'),
          ),
          body: ListView(children: divided),
        );                       // ... to here.
      },
    ),
  );
}
  1. App을 핫 리로드합니다. 선택한 항목 중 일부를 즐겨찾기하고 App Bar에서 리스트 아이콘을 탭합니다. 즐겨찾기한 항목들이 출력되는 새로운 경로가 출력됩니다. Navigator가 App Bar에 "뒤로가기-Back" 버튼을 추가합니다. 뒤로가기 위해서 명시적으로 Navigator.pop 기능을 구현할 필요가 없습니다. "Back" 버튼을 탭하면 홈 경로로 이동합니다.

이미지5이미지6

문제가 있나요?

App이 정확히 동작하지 않을 경우, 다음 링크의 코드와 비교해 볼 수 있습니다.

테마를 이용해서 UI 변경하기

다음 단계에서는, App의 테마를 변경합니다. 테마는 App의 룩앤필을 제어합니다. 실제 기기나 에뮬레이터에서 제공하는 기본 테마를 사용하거나 브랜딩을 반영하는 사용자정의된 테마를 사용할 수 있습니다.

ThemeData 클래스를 설정하는 것으로 App의 테마를 쉽게 변경할 수 있습니다. 지금 만들고 있는 App은 기본 테마를 사용하고 있지만 App의 주요 색상(primary color)을 흰색으로 변경할 수 있습니다.

  1. MyApp 클래스에서 색상 변경하기:
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Startup Name Generator',
      theme: ThemeData(          // Add the 3 lines from here...
        primaryColor: Colors.white,
      ),                         // ... to here.
      home: RandomWords(),
    );
  }
}
  1. App을 핫 리로드합니다. 전체 배경색이 App Bar를 포함해서 이제 모두 흰색으로 변경되었습니다.

또 다른 연습으로 ThemeData를 사용해서 UI의 다른 부분을 변경해 보세요. Material 라이브러리의 Colors 클래스는 사용할 수 있는 많은 색상을 제공하고, 핫 리로드를 사용해서 빠르게 적용해 볼 수 있습니다.

이미지7이미지8

문제가 있나요?

App이 정확히 동작하지 않을 경우, 다음 링크의 코드와 비교해 볼 수 있습니다.

잘 했어요!

iOS와 Android 모두에서 작동하는 상호작용 Flutter App을 만들어 보았습니다. 이번 코드 실습에서 배운 것은 다음과 같습니다:

  • Dart code 작성하기
  • 빠른 개발을 위해 핫 리로드 사용하기
  • App에 상호작용하는 기능을 추가하기 위해 상태 저장 위젯을 구현하는 방법
  • 홈 경로와 새로운 경로 사이를 이동하기 위해 경로를 생성하고 코드를 작성하기
  • 테마를 사용해서 UI의 룩앤필을 변경하는 방법

다음에 배울 것들

Flutter SDK에 대해 더 배우고 싶다면:

그 외의 리소스들:

'programming > flutter' 카테고리의 다른 글

(6) Flutter - 더 배워보기  (0) 2019.11.02
(4) Flutter - 첫 번째 Flutter App 만들기, part1  (0) 2019.10.27
(3) Flutter - 맛보기(Test Drive)  (0) 2019.10.27
(2) Flutter - 편집기 설정  (0) 2019.10.27
(1) Flutter - 설치  (0) 2019.10.27

NOTE!
이 문서는 Flutter.io의 문서를 한글로 번역한 문서입니다. 원문 바로가기

목차

Step1: 스타터 Flutter App 만들기
Step2: 외부 패키지 사용
Step3: 상태기반 위젯 만들기
Step4: 무한 스크롤 리스트뷰 만들기
프로파일 또는 릴리즈 실행

이 문서는 첫 번째 Flutter App을 만드는데 도움을 주는 안내서입니다. 만약 객체지향코드나 변수, 반복문, 조건문 등의 기본 프로그래밍 컨셉에 익숙하다면 이 튜토리얼을 완료할 수 있습니다. Dart나 모바일/웹 프로그래밍에 대한 경험이 없어도 됩니다.

이 문서는 두 개의 파트로 구성된 코드랩(codelab)의 첫 번째 파트(part 1)입니다. 두 번째 파트Google Developer에서 찾을 수 있습니다. 첫 번째 파트 역시 Google Developer에서 찾을 수 있습니다.

이미지1

Part 1에서 만드는 것

스타트업 회사의 이름을 제안하는 간단한 모바일 앱을 만들어 봅니다. 사용자는 이름을 선택하거나 선택해제할 수 있고 그 중 하나를 저장할 수 있습니다. 코드는 이름을 지연하여(lazily) 생성합니다. 즉, 사용자가 스크롤할 때 더 많은 이름을 생성하게 됩니다. 사용자는 스크롤을 제한 없이 할 수 있습니다.

위 애니메이션 GIF는 part 1에서 완성된 앱이 어떻게 동작하는지 보여줍니다.

part 1에서 배울 수 있는 것들

  • iOS, Android, Web에서 자연스럽게 보이는 Flutter App을 만드는 방법
  • Flutter App의 기본 구조
  • 기능 확장을 위해 패키지를 찾고 사용하는 방법
  • 빠른 개발 사이클을 위해 핫 리로드 하는 방법
  • 상태 저장 위젯을 구현하는 방법
  • 무한 지연 로드 리스트를 생성하는 방법

코드실습(codelab)의 part 2에서는 대화형 기능을 추가하고, App의 테마를 수정하고, 새로운 화면으로 이동하는 기능(Flutter의 라우터라 불리우는)을 추가합니다.

사용하는 것들

이 실습을 완료하려면 두 개의 소프트웨어가 필요합니다. Flutter SDK편집기입니다. 이 코드 실습에서는 Android Studio를 사용한다고 가정하지만 선호하는 다른 편집기를 사용해도 됩니다.

다음 기기에서 이 코드 실습을 실행해 볼 수 있습니다:

Step 1: Starter Flutter App 만들기

첫 번째 Flutter App 만들기 순서에 따라 간단한 템플릿화된 Flutter App을 만듭니다. 프로젝트 이름은 myapp 대신 startup_namer로 입력합니다.

TIP IDE에서 "New Flutter Project" 메뉴가 보이지 않는 다면, Flutter와 Dart를 위한 플러그인 설치문서를 참고하세요.

이번 코드 실습에서는 Dart 코드가 있는 lib/main.dart 파일을 대부분 편집하게 됩니다.

  1. lib/main.dart파일의 내용을 교체합니다.
    lib/main.dart 파일의 내용을 모두 삭제후 화면의 중앙에 "Hello World" 문자열을 출력하는 아래 코드로 바꿉니다.

    // Copyright 2018 The Flutter team. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    
    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Welcome to Flutter',
          home: Scaffold(
            appBar: AppBar(
              title: Text('Welcome to Flutter'),
            ),
            body: Center(
              child: Text('Hello World'),
            ),
          ),
        );
      }
    }

    TIP 코드를 붙여넣을 때 들여쓰기가 이상해질 수 있습니다. Flutter 도구를 사용해서 자동적으로 수정되도록 할 수 있습니다.

    • Android Studio / IntelliJ IDEA: 마우스 우측 버튼을 클릭 후 Reformat Code with dartfmt를 선택합니다.
    • VS Code: 마우스 우측 버튼을 클릭한 후 Format Document를 선택합니다.
    • Terminal: flutter format 을 실행합니다.
  2. 각자의 IDE에서 App을 실행합니다. Android나 iOS에서 각자의 기기에 따라 다음과 같은 화면을 보게 됩니다.

    이미지1)이미지2

    TIP 물리기기에서 처음 실행할 때, 로드하는데 다소 시간이 소요될 수 있습니다. 이후에는 핫 리로드를 사용해서 빠르게 갱신할 수 있습니다. App이 실행 중일 때 저장하면 핫 리로드가 수행됩니다.

살펴보기

  • 이 예제는 Material App을 만듭니다. Material은 모바일과 웹에서 표준인 시각적인 디자인 언어(Visual Design Language)입니다. Flutter는 풍부한 Material 위젯을 제공합니다.
  • main() 메서드는 화살표(=>) 표기법을 사용할 수 있습니다. 화살표 표기법은 한 줄의 함수나 메서드에 사용됩니다.
  • App은 StatelessWidget을 확장하여 App 자체를 위젯으로 만듭니다. Flutter에서는 대부분이 모두 정렬과 패딩, 레이아웃을 포함하는 위젯입니다.
  • Material 라이브러리의 Scaffold 위젯은 홈 화면에서 위젯 트리를 구성하는 기본적인 app bar, title, body 속성을 제공합니다.
  • 위젯의 주요 임무는 다른 하위 레벨 위젯으로 위젯을 표시하는 방법을 설명하는 build() 함수를 제공하는 것입니다.
  • 이 예제의 body는 Text 자식 위젯을 포함하는 Center 위젯으로 구성됩니다. Center 위젯은 서브트리로 구성된 자식 위젯들을 화면의 중앙에 배치합니다.

Step 2: 외부 패키지 사용

이번 단계에서는, 오픈 소스 패키지 중 하나인 english_words 패키지를 사용합니다. 이 패키지에는 수천개의 자주 사용되는 영어 단어들과 유용한 함수가 포함되어 있습니다.

pub.dev에서 english_words 패키지 뿐만 아니라 더 많은 오픈 소스 패키지들을 찾을 수 있습니다.

  1. pubspec 파일은 Flutter App에서 의존성 관리를 담당합니다. pubspec.yaml 파일을 열어 english_words(3.1.0 이상) 패키지를 다음과 같이 추가합니다:

    dependencies:
      flutter:
        sdk: flutter
      cupertino_icons: ^0.1.2
      english_words: ^3.1.0
  2. Android Studio의 편집 뷰에서 pubspec을 보는 동안 Packages get을 클릭하면 프로젝트에 의존하는 패키지들을 가져오게 됩니다. 콘솔에서는 다음과 같이 실행할 수 있습니다.

    $ flutter pub get
    Running "flutter pub get" in startup_namer...
    Process finished with exit code 0

    Packages get을 실행하면 프로젝트로 가져오는 모든 패키지 리스트와 버전이 pubspec.lock 파일에 자동 생성됩니다.

  3. lib/main.dart에는 해당 패키지를 import하는 코드를 작성합니다.

    import 'package:flutter/material.dart';
    import 'package:english_words/english_words.dart';

    Android Studio에서 타이핑하면 import할 라이브러리를 자동으로 제안하고 해당 문자열을 회색으로 렌더링해서 아직 사용되고 있지 않음을 보여줍니다.

  4. english_words 패키지를 사용해서 "Hello World" 대신에 자동 생성된 단어들을 출력합니다:

    class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
     final wordPair = WordPair.random();
     return MaterialApp(
       title: 'Welcome to Flutter',
       home: Scaffold(
       ...
         title: Text('Welcome to Flutter'),
         ),
         body: Center(
           // child: Text('Hello World'),
           child: Text(wordPair.asPascalCase),
         ),
       ),
     );

    NOTE "Pascal case"(Camel case로 알려진)는, 문자열에서 각 단어의 첫 글자가 대문자로 시작하는 방식을 의미합니다. 그래서 "uppercamelcase"는 "UpperCamelCase"가 됩니다.

  5. App이 실행 중인 경우, 실행 중인 App을 갱신하기 위해 핫 리로드를 사용하세요. 핫 리로드(hot reload)를 클릭할 때마다, 또는 프로젝트를 저장할 때마다, 실행 중인 App에서 랜덤으로 선택된 다른 단어 쌍을 볼 수 있습니다. 이렇게 되는 이유는 MaterialApp이 렌더링될 때마다(또는 Flutter Inspector에서 Platform을 변경할 때마다) 실행되는 build 메서드때문이며, 이 메서드 안에서 단어 쌍을 매번 새로 생성하기 때문입니다.

    이미지1)이미지2

문제가 있나요?

App이 기대한대로 실행되지 않는다면, 오타를 확인해 보세요. Flutter의 디버깅 도구를 사용하고 싶다면, DevTools 에서 디버깅과 프로파일링 도구를 확인하면 됩니다. 필요하다면, 다음 링크의 코드를 사용해서 본인의 코드와 비교해 보세요.

Step 3: 상태 저장 위젯(Stateful widget) 추가하기

상태 비저장 위젯(Stateless widget)은 변경될 수 없으므로(속성이 변경될 수 없음을 의미) 모든 값은 최종값(final)입니다.

상태 저장 위젯은 위젯의 생명주기동안 변경되는 상태를 유지관리합니다. 상태 저장 위젯을 구현하기 위해서는 적어도 다음 두 클래스가 필요합니다: 1) StatefulWidget 클래스는 2) State 클래스의 인스턴스를 생성합니다. StatefulWidget 클래스는 그 자체는 불변하지만 State 클래스는 위젯의 생명주기동안 유지됩니다.

이번 단계에서, RandomWordsState 상태(State) 클래스를 생성하는 RandomWords 상태 저장 위젯을 추가하게 됩니다. 그런 다음 기존의 MyApp 상태 비저장 위젯의 자식으로 RandomWords를 사용하도록 작성합니다.

  1. 최소 상태 클래스를 생성합니다. main.dart의 하단에 다음 코드를 추가합니다:

    class RandomWordsState extends State<RandomWords> {
      // TODO Add build() method
    }

    State 선언을 주목해 보죠. 이 것이 가리키는 것은 RandomWords 클래스를 사용하도록 특수화된 일반화(generic) State 클래스를 사용한다는 것을 의미합니다. 대부분의 App 로직(logic)과 상태는 여기에 있고 RandomWords 위젯의 상태를 유지합니다. 이 클래스는 사용자가 스크롤을 할 때마다 생성된 단어 쌍과 part 2에서 구현할 즐겨찾기(하트 아이콘을 토글할 때 마다 추가하거나 삭제하게 되는)한 단어 쌍을 저장합니다.

    RandomWordsStateRandomWords클래스에 의존적입니다. 다음에 추가합니다.

  2. main.dart에 상태 저장 RandomWords 위젯을 추가합니다. RandomWords 위젯은 State 클래스를 생성하는 것 외에는 거의 하는 일이 없습니다:

    class RandomWords extends StatefulWidget {
      @override
      RandomWordsState createState() => RandomWordsState();
    }

    State 클래스를 추가한 이후에, IDE는 클래스에 build 메서드가 없다고 출력합니다. 다음에는 단어 생성 코드를 MyApp에서 RandomWordsState 클래스로 이동해서 단어 쌍을 생성하는 build 매서드를 추가합니다.

  3. RandomWordsState 클래스에 build() 메서드를 추가합니다:

    class RandomWordsState extends State<RandomWords> {
      @override
      Widget build(BuildContext context) {
        final wordPair = WordPair.random();
        return Text(wordPair.asPascalCase);
        }
      }
  4. 아래 코드와 같이 MyApp에서 단어 생성 코드를 제거합니다:

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
    -  final wordPair = WordPair.random();
       return MaterialApp(
         title: 'Welcome to Flutter',
         home: Scaffold(
    @@ -18,8 +17,8 @@
              title: Text('Welcome to Flutter'),
            ),
            body: Center(
    -        child: Text(wordPair.asPascalCase),
    +        child: RandomWords(),
            ),
          ),
        );
      }
  5. App을 재시작합니다. App은 이전과 같이 작동하며, 핫 리로드를 하거나 App을 저장할 때마다 새로운 단어 쌍을 출력합니다.

TIP 핫 리로드를 할 때 다음과 같은 경고가 출력될 경우, App을 재시작하세요:

Reloading…
Some program elements were changed during reload but did not run when the view was reassembled; you might need to restart the app (by pressing “R”) for the changes to have an effect.

이 경우는 오팀지일 수 있는데, 재시작하므로써 App의 UI에 변경사항이 정확히 반영되도록 할 수 있습니다.

문제가 있나요?

App이 정확히 실행되지 않을 경우, 오타를 확인하세요. Flutter의 디버깅 도구를 사용하고 싶다면, DevTools 에서 디버깅과 프로파일링 도구를 확인하면 됩니다. 필요하다면, 다음 링크의 코드를 사용해서 본인의 코드와 비교해 보세요.

프로파일 또는 릴리즈 실행

IMPORTANT 디버그나 핫리로드가 활성화된 상태에서 App의 성능을 테스트하지 마세요.

지금까지 디버그 모드에서 앱을 실행했습니다. 디버그 모드는 핫 리로드 및 단계별 디버깅과 같은 유용한 개발자 기능을 위해 성능 저하를 감수합니다. 디버그 모드에서 성능이 저하되고 고르지 않은 애니메이션이 나타나는 것은 예상 가능합니다. 일단 App의 성능을 분석하거나 릴리즈할 준비가 되면, Flutter의 "profile"이나 "release" 빌드 모드를 사용해야 합니다. 좀 더 자세한 내용은 Flutter의 빌드 모드문서를 참고하세요.

다음 단계

축하합니다!

이제 iOS와 Android에서 실행되는 상호작용하는 Flutter App을 만들었습니다. 이번 코드 실습에서 진행된 내용은 다음과 같습니다:

  • 밑바닥부터 Flutter App을 만들었습니다.
  • Dart 코드를 작성했습니다.
  • 외부의 써드파티 라이브러리를 사용했습니다.
  • 빠른 개발 사이클을 위해 핫 리로드를 사용했습니다.
  • 상태 저장 위젯을 구현했습니다.
  • 지연 로딩을 작성했고 무한 스크롤 리스트를 구현했습니다.

이 App을 확장하고 싶다면, Google Developers Codelabs 사이트에 있는 part 2를 따라서 다음의 기능을 추가할 수 있습니다:

  • 즐겨찾기 단어 쌍을 저장하기 위해 클릭 가능한 Heart 아이콘을 추가해서 상호작용하는 코드를 구현합니다.
  • 저장된 즐겨찾기를 출력하는 새로운 화면을 추가해서 새로운 경로로 이동할 수 있는 네비게이션 기능을 추가합니다.
  • 색상 테마를 수정해서 모든 것이 하얀 App을 만듭니다.

이미지3

'programming > flutter' 카테고리의 다른 글

(6) Flutter - 더 배워보기  (0) 2019.11.02
(5) Flutter - 첫 번째 Flutter App 만들기, part2  (0) 2019.11.02
(3) Flutter - 맛보기(Test Drive)  (0) 2019.10.27
(2) Flutter - 편집기 설정  (0) 2019.10.27
(1) Flutter - 설치  (0) 2019.10.27

NOTE!
이 문서는 Flutter.io의 문서를 한글로 번역한 문서입니다. 원문 바로가기
이 문서에서는 VS Code 기준으로 설명합니다. Android Studio/IntelliJ, Terminal & 다른 편집기 사용법은 원문을 참고하세요.

이 문서에서는 템플릿으로부터 새로운 Flutter App을 어떻게 만들고, 어떻게 실행하고, app에 변경을 준 후 어떻게 "핫 리로드"를 경험할 수 있는지 설명합니다.

새로운 App 만들기

웹에서 Flutter App을 실행하고 싶으신가요? Flutter의 웹 버전은 얼리 서포트 릴리즈에서 사용 가능합니다만, 몇몇의 기능이 빠져 있고 또한 아직 프로덕션 용도로 사용할 수 없는 버전입니다. 그래도 사용해 보고 싶다면 따라해 보기 문서를 참고하세요.

  1. View>Command Palette 메뉴를 실행합니다.
  2. "flutter"를 입력해서 나온 기능 리스트 중에서 Flutter:New Project 기능을 선택합니다.
  3. 프로젝트 이름을 입력하고-예를 들어 myapp 과 같은- 엔터를 입력합니다.
  4. 새로운 프로젝트 폴더가 만들어질 부모 디렉토리를 선택합니다.
  5. 프로젝트가 생성되어 main.dart 파일이 보일 때까지 기다립니다.

위의 순서대로 실행하면 myapp 이라는 이름의 Flutter 프로젝트 디렉토리가 생성됩니다. 이 프로젝트에는 Material Components를 사용하는 간단한 데모 앱이 포함되어 있습니다.

NOTE! 새로운 Flutter App을 만들 때, 어떤 Flutter IDE 플러그인은 회사의 역순 도메인(예를 들어 com.example. 같은)을 요구하기도 합니다. 회사 도메인 이름과 프로젝트 이름은 App이 릴리즈될 때 Android(iOS에서는 번들 ID)를 위한 패키지 이름으로 함께 사용됩니다. 만약 App을 릴리즈할 계획이라면, 지금 제대로된 패키지 이름을 지정하는 것이 좋습니다. App이 한 번 릴리즈되고 나면 패키지 이름은 유니크하기 때문에 변경할 수 없습니다.

TIP App을 위한 코드는 lib/main.dart에 있습니다. 각 코드 블럭에 대한 설명은 파일의 맨 위에 있는 주석을 참고하세요.

App 실행

  1. VS Code의 상태 바를 찾아보세요.(윈도우의 하단 파란색 바입니다.)
    이미지1
  2. Device Selector 영역에서 기기를 선택하세요. 자세한 내용은 Flutter 기기간 빠른 전환문서를 참고하세요.
    • 사용 가능한 어떤 기기도 없어 시뮬레이터를 사용하고 싶다면, No Device를 선택하고 시뮬레이터를 실행합니다.
    • 실제 기기를 설정하고 싶다면, 설치 문서를 참고해서 OS에 맞는 적합한 기기를 설정하세요.
  3. Settings button을 클릭하세요 - 디버그 패널에서 오른쪽 위에 디버그 텍스트 옆에 No Configuration이라고 적혀있는 박스 오른쪽 옆에 있는 톱니바퀴 모양의 아이콘(현재는 빨간색이나 오렌지색의 동그란 인디게이터가 표시되어 있을 겁니다.)입니다. 구성에서 flutter를 선택하세요. 에뮬레이터가 없다면 만들고 있다면 실행해 두세요. 실제 기기일 경우 지금 연결해 두면 됩니다.
  4. Debug>Start Debugging 메뉴를 선택하거나 F5키를 누르세요.
  5. App이 실행될 때까지 기다립니다. - 진행상황이 Debug Console에 출력됩니다.

App이 성공적으로 빌드가 완료되면, 기기에서 다음과 같은 스타터 앱을 볼 수 있습니다.

이미지2 <>

핫 리로드

Flutter는 상태저장 핫 리로드(Stateful Hot Reload)를 지원해서 빠른 개발 사이클을 제공합니다. 이를 통해 재시작을 하지 않고 또한 앱의 상태를 잃지 않고 실행 중에 코드를 리로드할 수 있게 됩니다. 코드를 변경하고 IDE나 command-line 도구에서 핫 리로드를 요청하면 시뮬레이터, 에뮬레이터, 기기에서 변경된 코드 결과물을 확인할 수 있습니다.

  1. lib/main.dart를 엽니다.

  2. 다음 문자열을 수정합니다.

    'You have

    pushed

    the button this many times'

    'You have clicked the button this many times'

  3. IMPORTANT 앱을 중지하지 마세요. 실행 중인 상태로 유지하세요.

  4. 아래와 같이
  5. 변경 사항을 저장합니다: Save All 메뉴를 선택하거나 Hot Reload 아이콘을 클릭하세요.

실행 중인 앱에서 즉시 변경된 문자열을 확인할 수 있습니다.

프로파일(분석) 또는 릴리즈 실행

IMPORTANT 디버그 및 핫 리로드가 활성화된 상태에서 성능을 테스트하지 마세요.

지금까지 앱을 디버그 모드에서 실행했습니다. 디버그 모드는 핫 리로드 또는 단계별 디버깅등의 유용한 기능을 위해 성능 포기를 감수합니다. 디버그 모드에서는 느린 성능과 고르지 않은 애니메이션을 볼 수도 있습니다. 앱의 성능을 분석하거나 릴리즈하기 위해서는 Flutter의 "profile" 또는 "release" 빌드 모드를 선택해야 합니다. 좀 더 많은 정보는 Flutter의 빌드 모드문서를 참고하세요.

다음 단계

다음 단계에서는 작은 앱을 만들어보면서 Flutter의 핵심 컨셉을 배워보도록 합니다.

NOTE!
이 문서는 Flutter.io의 문서를 한글로 번역한 문서입니다. 원문 바로가기
이 문서에서는 VS Code 기준으로 설명합니다. Android Studio/IntelliJ 설정은 원문을 참고하세요.

Flutter는 Flutter의 command-line 도구들을 사용하면 어떤 텍스트 편집기라도 사용해서 빌드할 수 있습니다. 하지만, 더 나은 사용 경험을 위해서 편집기 플러그인을 사용하는 것을 권장합니다. 이 플러그인들은 코드 완성이나 구문 강조, 위젯 편집 어시스트, 실행과 디버깅 지원, 기타 등등 많은 기능을 제공합니다.

다음 단계를 따라 VS Code에 편집기 플러그인을 추가해 보도록 합니다. 다른 편집기를 사용하고 싶다면, 이 단계를 스킵하고 다음 단계: Test Drive로 이동해도 됩니다.

VS Code 설치

VS Code는 Flutter App의 실행과 디버깅을 지원하는 가벼운 편집기입니다.
아래 링크에서 VS Code의 최신 버전을 다운로드 받아 설치하세요.

Flutter와 Dart 플러그인 설치

  1. VS Code를 실행합니다.
  2. View>Command Palette 메뉴를 실행합니다.
  3. "install"을 입력해서 검색되는 기능 중에 Extensions:Install Extensions 기능을 선택합니다.
  4. 확장 검색 필드에서 "flutter"를 입력한 후 검색 결과에서 Flutter를 선택하고 Install을 클릭합니다. 이 작업을 통해 Dart 플러그인도 함께 설치됩니다.

Flutter Doctor를 사용해 설정 검증하기

  1. View>Command Palette 메뉴를 실행합니다.
  2. "doctor"를 입력해서 검색되는 기능 중에 Flutter:Run Flutter Doctor 기능을 선택합니다.
  3. OUTPUT 패인에서 출력 결과를 확인합니다.

다음 단계

Flutter를 시운전(Test Drive)해 봅니다: 첫 번째 프로젝트를 만들고, 실행하고, "핫 리로드"를 경험해 봅시다.

NOTE!
이 문서는 Flutter.io의 문서를 한글로 번역한 문서입니다. 원문 바로가기
이 문서에서는 macOS 기준으로 설명합니다.
다른 OS의 경우 Flutter 설치 문서를 참고하세요.

시스템 요구 사항

Flutter를 설치하고 실행하려면, 개발환경이 다음 최소 요구사항을 만족해야 합니다.

  • 운영 체제: macOS (64-bit)
  • 디스크 용량: 2.8 GB( IDE/도구들의 용량은 제외한 용량입니다.)
  • 도구들: Flutter는 개발환경에서 다음 command-line 도구들을 필요로 합니다.
    • bash
    • curl
    • git 2.x
    • mkdir
    • rm
    • unzip
    • which

Flutter SDK 구하기

  1. Flutter SDK의 최신 안정화 릴리즈를 얻기 위해 다음 설치 번들을 다운로드 합니다.
    flutter_macos_v1.9.1+hotfix.5-stable.zip
    다른 릴리즈 채널에서 이전 빌드를 구하려면 SDK archive페이지를 방문해 보세요.

  2. 다운로드 받은 설치 번들을 원하는 위치에서 압축을 해제합니다. 예를 들면 다음과 같습니다.

    $ cd ~/development
    $ unzip ~/Downloads/flutter_...-stable.zip
  3. Flutter 도구를 path 환경변수에 추가합니다.

    $ export PATH="$PATH:`pwd`/flutter/bin"

    위 command는 현재 터미널 윈도우의 환경 변수에만 영향을 줍니다.
    영구적으로 설정하고 싶다면 Update your path문서를 참고하세요.

  4. 선택적으로, 개발 바이너리를 미리 다운로드 받습니다:

    flutter 도구는 필요할 경우 플랫폼별 개발 바이너리들을 다운로드합니다. 이런 아티팩트들을 미리 다운로딩하는 것이 적합한 시나리오 일 경우(예를 들어, 기밀 빌드 환경 또는 네트워크 상태가 불량한 환경 등), 다음 과 같이 실행하여 iOS와 Android 바이너리들이 실행되기 전에 미리 다운로드 될 수 있습니다:

    $ flutter precache

    추가 적인 다운로드 옵션들을 보고 싶다면 flutter help precache를 사용해서 살펴보세요.

자, 이제 Flutter 명령들을 사용할 수 있는 준비가 되었습니다.

NOTE! Flutter를 업그레이드하고 싶다면 Upgrading Flutter문서를 참고하세요.

flutter doctor 실행하기

설정(Setup)을 완료하기 위해 아직 미설치된 의존성이 존재하는지 확인하려면 다음 command를 실행합니다(자세한 정보를 보려면 -v 플래그를 추가합니다):

$ flutter doctor

이 command는 현재 개발환경을 검사하고 터미널 윈도우에 보고서를 출력합니다. Dart SDK는 Flutter에 번들되어 있기때문에 별도로 설치할 필요는 없습니다. 검사 보고서를 꼼꼼히 살펴보고 추가로 설치할 소프트웨어가 있는지 확인합니다.

예:

[-] Android toolchain - develop for Android devices
    • Android SDK at /Users/obiwan/Library/Android/sdk
    ✗ Android SDK is missing command line tools; download from https://goo.gl/XxQghQ
    • Try re-installing or updating your Android SDK,
      visit https://flutter.dev/setup/#android-setup for detailed instructions.

다음 섹션은 이러한 과정을 어떻게 수행해서 설정 절차를 끝마치게 되는지 설명합니다.

일단 누락된 의존성을 설치한 후 flutter doctor를 다시 실행해서 모두 제대로 설정되었는지 확인합니다.

Warning! flutter 도구는 익명으로 기능의 사용 통계와 기본 크래시 보고를 위해 구글 분석기(Google Analytics)를 사용합니다. 보고된 데이터는 flutter 도구를 개선하는데 도움을 줍니다.

flutter 도구 분석은 최초 실행 할 때나 flutter 설정과 관련된 실행을 할 때는 전송되지 않으므로 flutter 도구에 의해 어떤 데이터라도 전송되기 전에 이를 해제 할 수 있습니다. 보고를 비활성화하려면, flutter config --no-analytics를 실행하면 되며, 현재 설정을 확인하려면 flutter config를 실행하면 됩니다.

Flutter SDK를 다운로드 받을 때 구글 서비스 약관에 동의합니다. Note: 구글 프라이버시 정책에 서비스에서 이 데이터들이 어떻게 처리되는지 설명하고 있습니다.

flutter는 Dart SDK를 포함하고 있고, 이 역시 사용 지표와 크래시 보고를 구글에 보냅니다.

PATH 환경 변수 설정

현재 터미널 세션에서 PATH에 flutter를 추가하는 방법은 위에서 설명했습니다. 하지만 이는 해당 터미널에서만 유효하고 다른 터미널에서는 적용되지 않습니다.

모든 터미널 세션에서 영구히 PATH 환경 변수를 수정하는 방법은 다음과 같습니다:

  1. Flutter SDK가 설치된 디렉토리를 확인합니다.

  2. shell에서 rc 파일을 엽니다. 에를 들어, macOS Mojave에서는 bash shell이 기본이므로 $HOME/.bashrc 파일을 편집하면 됩니다. macOS Catalina에서는 Z shell이 기본이므로 $HOME/.zshrc 파일을 편집합니다. 만약 다른 shell을 사용한다면 해당 shell에 적절한 rc파일을 편집해야 합니다.

  3. 다음 라인을 추가하고 [PATH_TO_FLUTTER_GIT_DIRECTORY 부분을 Flutter를 Clone했거나 Flutter SDK를 설치한 디렉토리로 변경합니다.

    export PATH="$PATH:[PATH_TO_FLUTTER_GIT_DIRECTORY]/flutter/bin"
  4. source $HOME/.rc file 을 실행해서 현재 터미널의 환경 변수를 갱신하거나 새로운 터미널 윈도우를 생성해서 자동적으로 환경 변수를 적용합니다.

  5. flutter/bin 디렉토리가 PATH 환경 변수에 잘 설정되었는지 확인합니다:

    $ echo $PATH

    flutter command가 사용가능한지 확인합니다:

    $ which flutter

플랫폼 설정

macOS는 iOS, Android, Web(테크니컬 프리뷰 릴리즈)용 Flutter App 개발을 지원합니다. 적어도 하나 이상의 플랫폼 설정이 완료되면 첫 번째 Flutter App을 빌드하고 실행할 수 있습니다.

iOS 설정

Xcode 설치

iOS를 위한 Flutter App을 개발하려면 먼저 Mac에 Xcode를 설치해야 합니다.

  1. 최신 안정화 버전 Xcode를 설치합니다.(Web Donwload 또는 Mac App Store)

  2. 새로이 설치된 버전의 Xcode를 사용하려면 다음 Xcode command-line 도구를 사용해서 설정해야 합니다:

    sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
    sudo xcodebuild -runFirstLaunch

    최신 버전의 Xcode를 사용하는 대부분의 경우 위에서 사용한 경로는 정확한 경로입니다. 다른 버전을 사용하고 싶은 경우 적합한 다른 경로를 입력해야 합니다.

  3. Xcode 라이센스 동의를 위해 Xcode를 한 번은 실행한 후 확인을 하거나 sudo xcodebuild -license 명령을 command-line에서 실행합니다.

최신 안전화 버전 이전의 오래된 버전들도 여전히 작동하겠지만 Flutter 개발에는 추천하지 않습니다. 오래된 버전의 Xcode에서 대상 비트코드로 빌드하는 것은 지원하지 않고 잘 작동하지 않을 수 있습니다.

Xcode와 함께, iOS 기기나 시뮬레이터를 사용해서 Flutter App을 실행할 수 있습니다.

iOS 시뮬레이터 설정

iOS 시뮬레이터에서 Flutter App을 실행하거나 테스트하기 위해 다음 단계를 따라주세요:

  1. Mac에서 Spotlight를 사용해 Simulator를 실행하거나 command-line에서 다음 명령을 실행해 주세요:

    $ open -a Simulator
  2. Simulator가 64-bit 기기를 사용하도록 하기 위해서 Hardware>Device 메뉴를 통해 설정을 확인해 주세요.

  3. 개발 장비의 스크린 크기에 따라, 고밀도 화면(high-screen-density)이 시뮬레이션된 iOS 기기가 화면을 벗어날(overflow) 수 있습니다. 시뮬레이터의 Window>Scale 메뉴에서 기기 스케일(Device Scale)을 조정하세요.

간단한 Flutter App을 만들고 실행하기

첫 번째 Flutter App을 만들고 테스트하기 위해 다음 단계를 따라주세요:

  1. 다음 command-line 명령어를 실행해 새로운 Flutter App을 만들어 주세요:

    $ flutter create my_app
  2. my_app 디렉토리에 Flutter의 스타터 앱이 생성됩니다. 해당 디렉토리로 이동하세요:

    $ cd my_app
  3. Simulator에서 app을 실행하기 위해 Simulator를 먼저 구동한 후 다음 명령어를 실행해 주세요:

    $ flutter run

iOS 기기에 배포

Flutter App을 실제 iOS 기기에 배포하기 위해서는 먼저 CocoaPods 의존성 관리자를 설치해야 하고 Apple Developer 계정을 생성해 둬야 합니다. Xcode에서 물리 기기에 배포할 수 있도록 설정도 필요합니다.

  1. 다음 명령을 실행해서 CocoaPods를 설치하고 설정해 주세요:

    sudo gem install cocoapods -v 1.7.5
    pod setup

    NOTE! CocoaPods 버전이 1.7.5보다 클 경우 pod setup명령이 실패합니다. 추가 정보를 확인하려면 issue 41253문서를 참고하세요.

  2. 프로젝트를 프로비전하기 위해서 다음 Xcode 서명 절차를 따르세요:

    1. Flutter 프로젝트 디렉토리에서 터미널 윈도우를 실행한 후 open ios/Runner.xcworkspace 명령을 실행해서 Xcode 워크스페이스를 엽니다.

    2. 실행 버튼 옆 기기 선택 드롭다운 메뉴에서 배포할 기기를 선택합니다.

    3. 왼쪽의 네비게이션 패널에서 Runner 프로젝트를 선택합니다.

    4. Runner 타겟 설정 페이지에서, Apple 개발자 계정에서 생성한 개발 팀(Development Team)을 선택합니다. Xcode 버전에 따라 UI는 달라질 수 있습니다.

      • Xcode 9 & 10 버전에서는, General>Signing>Team 아래에 위치합니다.
      • Xcode 11 이상의 버전에서는, Signing & Capabilities>Team 아래에 위치합니다.

      팀을 선택하면, Xcode는 개발 증명서(Development Certificate)를 생성하고 다운로드를 하며, 해당 계정에 기기를 등록한 후, 필요할 경우 프로비저닝 프로필(Provisioning Profile)을 생성한 후 다운로드 합니다.

      • 첫 번째 iOS 개발 프로젝트를 시작하기 위해서, APPLE ID로 Xcode에서 서명을 해야 합니다.
        이미지1

      개발과 테스팅은 모든 Apple ID에 대해 지원됩니다. 하지만 App을 App Store에 배포하려면 Apple Developer Program에 등록되어야 합니다. 멤버쉽에 대한 더 자세한 내용을 확인하려면 Choosing a Membership 문서를 참고하세요.

      • 처음에 iOS 개발을 위해 물리 기기를 사용하려면, 먼저 기기에서 Mac과 개발 증명서(Development Certificate) 모두 신뢰해야 합니다. iOS 기기를 Mac에 처음 연결할 때 뜨는 프롬프트 다이얼로그에서 Trust를 선택합니다.

        이미지2

        그 다음, iOS 기기에서 설정으로 가서 일반>프로파일 및 기기관리 메뉴에서 개발자 앱 증명서(Certificate)를 신뢰하도록 합니다.

      • Xcode에서 자동으로 서명하는데 실패할 경우, *General>Identify>Bundle Identifier 값이 유일한지 확인해야 합니다.

        이미지3
  3. flutter run 명령을 실행해서 앱을 실행합니다.

Android 설정

NOTE! Flutter는 Android 플랫폼 의존성을 제공하기 위해서 Android Studio의 전체 설치에 의지합니다. 하지만, Android Studio 이 외에 다른 많은 에디터를 사용해서 Flutter App을 개발할 수 있습니다; 다음 단계에서 이에 대한 내용을 다룰 예정입니다.

Android Studio 설치

  1. Android Studio를 다운로드 받아 설치합니다.
  2. Android Studio를 실행한 후 Android Studio 설정 마법사를 진행하세요. 이 과정에서 Android를 위한 Flutter App을 개발할 때 필요한 최신 Android SDK, Android SDK Platform-Tools, Android SDK Build-Tools를 설치합니다.

Android 기기 설정

Android 기기에서 Flutter App을 실행하고 테스트하기 위한 준비를 하기 위해서, Android 기기의 Android 버전은 4.1(API Level 16) 이상이어야 합니다.

  1. 기기에서 개발자 옵션USB 디버깅을 활성화 합니다. 자세한 방법은 Android 문서를 참고하세요.
  2. 윈도우에서만: Google USB Driver를 설치합니다.
  3. USB 케이블을 사용해서 기기를 컴퓨터에 연결합니다. 기기에서 프롬프트가 출력되면 컴퓨터가 기기에 접근할 수 있는 권한을 부여해야 합니다.
  4. 터미널에서, flutter devices 명령을 실행해서 Flutter가 연결된 Android 기기를 식별하는지 확인합니다. 기본적으로, Flutter는 설치된 adb 도구의 위치에 있는 Android SDK의 버전을 사용합니다. 만약 다른 버전의 Android SDK를 사용하려면, ANDROID_HOME 환경변수를 설정해서 원하는 Android SDK를 지정하도록 합니다.

Android 에뮬레이터 설정

Android 에뮬레이터에서 Flutter App을 실행하고 테스트하기 위한 준비를 하기 위해서, 다음 단계를 따르도록 합니다:

  1. 개발 장비에서 VM acceleration 기능을 활성화 합니다.
  2. Android Studio를 실행하고, Tools>Android>AVD Manager에서 Create Virtual Device 메뉴를 선택합니다.(Android 부메뉴는 오직 Android Project 내부에서만 출력됩니다.)
  3. 기기 정의(Device Definition)을 선택하고 Next를 클릭합니다.
  4. 에뮬레이션할 모든 Android 버전의 시스템 이미지를 하나 이상 선택하고, Next를 클릭합니다. x86이나 x86_64 이미지를 추천합니다.
  5. Emulated Performance에서 하드웨어 가속을 위해서 Hardware-GLES 2.0을 선택합니다.
  6. AVD 설정이 정확한지 확인 한 후, Finish를 선택합니다.
    좀 더 자세한 정보를 원하실 경우 Managing AVDs 문서를 참고하세요.
  7. Android Virtual Device Manager에서, 툴바에 있는 Run을 클릭합니다. 에뮬레이터가 시작되고 선택된 OS 버전을 위한 기본 캔버스와 기기가 출력됩니다.

웹 설정

WARNING! 웹을 위한 Flutter는 현재 테크니컬 프리뷰로 제공됩니다. 웹에서 Flutter App을 실행하면 크래시나 누락된 기능을 경험할 수 있습니다. 이런 경우가 생기면 알려 주세요.

웹을 위한 Flutter App을 실행하거나 테스트하려면 아직 설치하지 않은 경우 Chrome을 설치해야 합니다.

다음

에디터를 설정하는 방법을 설명합니다.

+ Recent posts