본문 바로가기
Study

29. Flutter에서 자주 사용하는 위젯 소개 및 활용법 | Flutter

by 구구 구구 2024. 7. 29.
반응형

뮤트 톤 팔레트 스타일, dall-e

 

 

Flutter Widget Catalog: 기본부터 고급까지 완벽 가이드

 

01. 기본 위젯

1) 기본적으로 알아야 할 위젯

Flutter에서 기본 위젯은 앱 개발에 필수적인 요소들로, 모든 Flutter 앱에서 사용됩니다. 이러한 위젯들은 Flutter의 구조와 작동 방식을 이해하는 데 중요한 역할을 합니다. 여기에는 텍스트를 표시하는 Text 위젯, 간단한 버튼을 만드는 RaisedButton 위젯, 다양한 위젯을 배열할 수 있는 Container 위젯 등이 포함됩니다.

예시 1: Text 위젯


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Text Widget Example'),
        ),
        body: Center(
          child: Text(
            'Hello, Flutter!',
            style: TextStyle(fontSize: 24, color: Colors.blue),
          ),
        ),
      ),
    );
  }
}

출력 결과: 중앙에 "Hello, Flutter!"라는 파란색 텍스트가 표시됩니다.

예시 2: RaisedButton 위젯


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Button Example'),
        ),
        body: Center(
          child: RaisedButton(
            onPressed: () {
              print('Button Pressed');
            },
            child: Text('Press Me'),
          ),
        ),
      ),
    );
  }
}

출력 결과: "Press Me" 버튼을 중앙에 표시하고, 버튼을 클릭하면 콘솔에 "Button Pressed"가 출력됩니다.

2) 주요 기본 위젯 소개

Container

Container 위젯은 레이아웃을 구성하는 기본적인 위젯입니다. 여백, 패딩, 배경색 등을 설정할 수 있으며, 다른 위젯들을 포함할 수 있습니다.

예시: Container 위젯


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Container Example'),
        ),
        body: Center(
          child: Container(
            padding: EdgeInsets.all(16.0),
            margin: EdgeInsets.all(16.0),
            color: Colors.blue,
            child: Text(
              'This is a Container',
              style: TextStyle(fontSize: 24, color: Colors.white),
            ),
          ),
        ),
      ),
    );
  }
}

출력 결과: 파란색 배경의 컨테이너 안에 흰색 텍스트 "This is a Container"가 중앙에 표시됩니다.

 

02. 애니메이션과 모션 위젯

1) 애니메이션을 추가하는 방법

Flutter에서 애니메이션을 추가하는 방법은 다양하지만, 기본적으로 Animation 객체와 AnimationController를 사용합니다. AnimationController는 애니메이션의 실행 시간을 제어하며, Animation 객체는 애니메이션의 현재 상태를 나타냅니다.

예시: 기본 애니메이션


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Animation Example'),
        ),
        body: Center(
          child: MyAnimatedWidget(),
        ),
      ),
    );
  }
}

class MyAnimatedWidget extends StatefulWidget {
  @override
  _MyAnimatedWidgetState createState() => _MyAnimatedWidgetState();
}

class _MyAnimatedWidgetState extends State with SingleTickerProviderStateMixin {
  AnimationController _controller;
  Animation _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 2),
      vsync: this,
    );
    _animation = Tween(begin: 0, end: 300).animate(_controller)
      ..addListener(() {
        setState(() {});
      });
    _controller.forward();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      width: _animation.value,
      height: _animation.value,
      color: Colors.blue,
    );
  }
}

출력 결과: 파란색 사각형이 2초 동안 크기가 0에서 300으로 커지는 애니메이션이 실행됩니다.

2) 주요 애니메이션 위젯 소개

AnimatedContainer

AnimatedContainerContainer와 유사하지만, 속성 변경 시 애니메이션을 통해 변화합니다.

예시: AnimatedContainer 위젯


import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State {
  bool _isLarge = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('AnimatedContainer Example'),
        ),
        body: Center(
          child: GestureDetector(
            onTap: () {
              setState(() {
                _isLarge = !_isLarge;
              });
            },
            child: AnimatedContainer(
              width: _isLarge ? 200 : 100,
              height: _isLarge ? 200 : 100,
              color: _isLarge ? Colors.blue : Colors.red,
              alignment: _isLarge ? Alignment.center : AlignmentDirectional.topCenter,
              duration: Duration(seconds: 1),
              curve: Curves.fastOutSlowIn,
              child: Text('Tap Me', style: TextStyle(color: Colors.white)),
            ),
          ),
        ),
      ),
    );
  }
}

출력 결과: 사용자가 탭할 때마다 크기와 색상이 변하는 컨테이너가 표시됩니다.

AnimatedOpacity

AnimatedOpacity는 위젯의 투명도를 애니메이션으로 변경할 수 있게 합니다.

예시: AnimatedOpacity 위젯


import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State {
  bool _visible = true;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('AnimatedOpacity Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              AnimatedOpacity(
                opacity: _visible ? 1.0 : 0.0,
                duration: Duration(seconds: 1),
                child: Container(
                  width: 200,
                  height: 200,
                  color: Colors.blue,
                ),
              ),
              SizedBox(height: 20),
              RaisedButton(
                onPressed: () {
                  setState(() {
                    _visible = !_visible;
                  });
                },
                child: Text('Fade'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

출력 결과: 버튼을 누를 때마다 파란색 사각형의 투명도가 변경되는 애니메이션이 실행됩니다.

 

03. Cupertino (iOS 스타일) 위젯

1) iOS 디자인 언어를 반영한 위젯

Flutter는 iOS와 Android 모두에서 일관된 사용자 경험을 제공하기 위해 Cupertino 위젯을 제공합니다. Cupertino 위젯은 iOS 디자인 언어를 반영한 고품질의 위젯으로, iOS 앱을 개발할 때 매우 유용합니다. 이러한 위젯들은 iOS 특유의 미적 감각과 사용자 인터페이스 요소를 그대로 구현하여, iOS 사용자가 익숙한 디자인과 느낌을 유지할 수 있게 해줍니다.

예시: 기본 CupertinoApp


import 'package:flutter/cupertino.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      home: CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: Text('CupertinoApp Example'),
        ),
        child: Center(
          child: Text('Hello, Cupertino!'),
        ),
      ),
    );
  }
}

출력 결과: iOS 스타일의 네비게이션 바와 중앙에 "Hello, Cupertino!"라는 텍스트가 있는 기본 Cupertino 앱 화면이 표시됩니다.

2) 주요 Cupertino 위젯 소개

CupertinoButton

CupertinoButton은 iOS 스타일의 버튼으로, 텍스트와 아이콘을 포함할 수 있습니다.

예시: CupertinoButton


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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      home: CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: Text('Cupertino Button Example'),
        ),
        child: Center(
          child: CupertinoButton(
            color: CupertinoColors.activeBlue,
            onPressed: () {
              print('Cupertino Button Pressed');
            },
            child: Text('Press Me'),
          ),
        ),
      ),
    );
  }
}

출력 결과: iOS 스타일의 파란색 버튼이 중앙에 표시되고, 버튼을 누르면 콘솔에 "Cupertino Button Pressed"가 출력됩니다.

CupertinoTextField

CupertinoTextField는 iOS 스타일의 텍스트 입력 필드입니다.

예시: CupertinoTextField


import 'package:flutter/cupertino.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      home: CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: Text('Cupertino TextField Example'),
        ),
        child: Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: CupertinoTextField(
              placeholder: 'Enter text',
            ),
          ),
        ),
      ),
    );
  }
}

출력 결과: 중앙에 텍스트 입력 필드가 표시되고, 사용자가 텍스트를 입력할 수 있습니다.

 

04. 상호작용과 입력 위젯

1) 사용자 입력을 처리하는 방법

Flutter에서는 다양한 상호작용 및 입력 위젯을 통해 사용자와의 상호작용을 처리할 수 있습니다. 이러한 위젯들은 터치, 제스처, 텍스트 입력 등을 포함하여 앱이 사용자와 상호작용하는 다양한 방식을 제공합니다.

예시: GestureDetector

GestureDetector는 터치 이벤트를 처리하는 데 사용되는 위젯입니다. 예를 들어, 탭, 더블탭, 롱프레스 등 다양한 제스처를 감지할 수 있습니다.

예시: GestureDetector


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GestureDetector Example'),
        ),
        body: Center(
          child: GestureDetector(
            onTap: () {
              print('Container Tapped');
            },
            child: Container(
              width: 100,
              height: 100,
              color: Colors.blue,
              child: Center(
                child: Text(
                  'Tap Me',
                  style: TextStyle(color: Colors.white),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

출력 결과: 파란색 컨테이너를 탭할 때마다 콘솔에 "Container Tapped"가 출력됩니다.

2) 주요 입력 및 상호작용 위젯 소개

TextField

TextField는 사용자가 텍스트를 입력할 수 있게 하는 기본 입력 위젯입니다.

예시: TextField


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TextField Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: TextField(
            decoration: InputDecoration(
              labelText: 'Enter text',
            ),
          ),
        ),
      ),
    );
  }
}

출력 결과: 사용자가 텍스트를 입력할 수 있는 텍스트 필드가 표시됩니다.

Checkbox

Checkbox는 사용자가 선택하거나 선택 해제할 수 있는 체크박스를 제공합니다.

예시: Checkbox


import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State {
  bool _isChecked = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Checkbox Example'),
        ),
        body: Center(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Checkbox(
                value: _isChecked,
                onChanged: (bool value) {
                  setState(() {
                    _isChecked = value;
                  });
                },
              ),
              Text('Check me'),
            ],
          ),
        ),
      ),
    );
  }
}

출력 결과: 체크박스를 클릭하여 선택하거나 선택 해제할 수 있습니다.

 

05. 레이아웃 위젯

1) 레이아웃을 구성하는 방법

Flutter에서 레이아웃을 구성하는 방법은 매우 유연하며, 다양한 위젯을 사용하여 화면을 쉽게 구성할 수 있습니다. 레이아웃 위젯은 다른 위젯들을 배열하고, 정렬하고, 배치하는 데 사용됩니다. 가장 기본적인 레이아웃 위젯으로는 Row, Column, Stack, Container 등이 있습니다.

예시: 기본 레이아웃


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Basic Layout Example'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Container(
                  width: 50,
                  height: 50,
                  color: Colors.red,
                ),
                Container(
                  width: 50,
                  height: 50,
                  color: Colors.green,
                ),
                Container(
                  width: 50,
                  height: 50,
                  color: Colors.blue,
                ),
              ],
            ),
            SizedBox(height: 20),
            Container(
              width: 100,
              height: 100,
              color: Colors.yellow,
              child: Center(
                child: Text('Centered'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

출력 결과: 세 개의 컬러 박스가 가로로 배열되고, 아래에 노란색 컨테이너가 중앙에 텍스트 "Centered"와 함께 세로로 배치됩니다.

2) 주요 레이아웃 위젯 소개

Row와 Column

RowColumn 위젯은 자식 위젯들을 각각 가로와 세로로 배열하는 데 사용됩니다.

예시: Row와 Column


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Row and Column Example'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Icon(Icons.star, size: 50, color: Colors.red),
                Icon(Icons.star, size: 50, color: Colors.green),
                Icon(Icons.star, size: 50, color: Colors.blue),
              ],
            ),
            SizedBox(height: 20),
            Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Icon(Icons.favorite, size: 50, color: Colors.pink),
                Icon(Icons.favorite, size: 50, color: Colors.orange),
                Icon(Icons.favorite, size: 50, color: Colors.purple),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

출력 결과: 세 개의 별 아이콘이 가로로 중앙에 배열되고, 아래에 세 개의 하트 아이콘이 세로로 중앙에 배열됩니다.

Stack

Stack 위젯은 자식 위젯들을 서로 겹쳐서 배치하는 데 사용됩니다.

예시: Stack


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Stack Example'),
        ),
        body: Center(
          child: Stack(
            alignment: Alignment.center,
            children: [
              Container(
                width: 200,
                height: 200,
                color: Colors.blue,
              ),
              Container(
                width: 150,
                height: 150,
                color: Colors.red,
              ),
              Container(
                width: 100,
                height: 100,
                color: Colors.yellow,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

출력 결과: 세 개의 컨테이너가 중앙에서 겹쳐져 배치됩니다.

Expanded

Expanded 위젯은 Row, Column 또는 Flex의 자식 위젯이 남은 공간을 채우도록 확장합니다.

예시: Expanded


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Expanded Example'),
        ),
        body: Column(
          children: [
            Container(
              color: Colors.red,
              height: 100,
            ),
            Expanded(
              child: Container(
                color: Colors.green,
              ),
            ),
            Container(
              color: Colors.blue,
              height: 100,
            ),
          ],
        ),
      ),
    );
  }
}

출력 결과: 상단과 하단에 고정된 높이의 컨테이너가 있고, 가운데의 녹색 컨테이너가 남은 공간을 모두 채웁니다.

 

06. 머티리얼 컴포넌트

1) Material 디자인 스펙을 구현한 위젯

Flutter는 구글의 Material 디자인 스펙을 충실히 구현한 다양한 위젯을 제공합니다. Material 디자인은 현대적이고 일관된 사용자 인터페이스를 제공하며, 사용자 경험을 향상시키는 데 중요한 역할을 합니다. Flutter의 Material 컴포넌트는 버튼, 카드, 다이얼로그 등 다양한 요소를 포함합니다.

예시: 기본 MaterialApp


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MaterialApp Example'),
        ),
        body: Center(
          child: Text('Hello, Material!'),
        ),
      ),
    );
  }
}

출력 결과: Material 디자인을 기반으로 한 기본 앱 화면이 표시됩니다.

2) 주요 머티리얼 컴포넌트 소개

AppBar

AppBar는 화면 상단에 제목과 작업을 표시하는 머티리얼 디자인의 앱 바입니다.

예시: AppBar


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('AppBar Example'),
        ),
        body: Center(
          child: Text('Hello, AppBar!'),
        ),
      ),
    );
  }
}

출력 결과: 화면 상단에 제목이 있는 AppBar가 표시됩니다.

FloatingActionButton

FloatingActionButton은 주요 작업을 강조하는 둥근 버튼입니다.

예시: FloatingActionButton


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('FloatingActionButton Example'),
        ),
        body: Center(
          child: Text('Press the button'),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            print('Floating Action Button Pressed');
          },
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

출력 결과: 화면 하단에 둥근 플로팅 액션 버튼이 표시되고, 버튼을 누르면 콘솔에 메시지가 출력됩니다.

Card

Card 위젯은 머티리얼 디자인의 카드 레이아웃을 구현합니다.

예시: Card


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Card Example'),
        ),
        body: Center(
          child: Card(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                ListTile(
                  leading: Icon(Icons.album),
                  title: Text('Card Title'),
                  subtitle: Text('Card Subtitle'),
                ),
                ButtonBar(
                  children: [
                    FlatButton(
                      child: Text('ACTION 1'),
                      onPressed: () {},
                    ),
                    FlatButton(
                      child: Text('ACTION 2'),
                      onPressed: () {},
                    ),
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

출력 결과: 카드 레이아웃에 제목, 부제목, 아이콘 및 버튼이 포함된 카드가 표시됩니다.

 

07. 기타 위젯

1) 스크롤, 텍스트, 스타일링 등 다양한 위젯

Flutter는 다양한 기능을 제공하는 여러 종류의 위젯을 갖추고 있습니다. 이러한 위젯들은 스크롤 기능, 텍스트 스타일링, 앱의 전반적인 스타일링을 위한 기능 등을 포함합니다. 주요 위젯으로는 ListView, GridView, Text, RichText, Theme 등이 있습니다.

예시: ListView

ListView는 스크롤 가능한 리스트를 만드는 데 사용됩니다.


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  final List items = List.generate(100, (i) => "Item $i");

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ListView Example'),
        ),
        body: ListView.builder(
          itemCount: items.length,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text('${items[index]}'),
            );
          },
        ),
      ),
    );
  }
}

출력 결과: 100개의 항목이 스크롤 가능한 리스트에 표시됩니다.

예시: GridView

GridView는 스크롤 가능한 그리드 레이아웃을 만드는 데 사용됩니다.


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  final List items = List.generate(50, (i) => "Item $i");

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GridView Example'),
        ),
        body: GridView.builder(
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 3,
          ),
          itemCount: items.length,
          itemBuilder: (context, index) {
            return Card(
              child: Center(
                child: Text('${items[index]}'),
              ),
            );
          },
        ),
      ),
    );
  }
}

출력 결과: 50개의 항목이 스크롤 가능한 그리드 레이아웃에 표시됩니다.

예시: Text

Text 위젯은 기본 텍스트를 표시하는 데 사용됩니다.


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Text Example'),
        ),
        body: Center(
          child: Text(
            'Hello, Flutter!',
            style: TextStyle(fontSize: 24, color: Colors.blue),
          ),
        ),
      ),
    );
  }
}

출력 결과: 중앙에 "Hello, Flutter!"라는 파란색 텍스트가 표시됩니다.

예시: RichText

RichText 위젯은 텍스트의 일부분을 다르게 스타일링할 수 있게 합니다.


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('RichText Example'),
        ),
        body: Center(
          child: RichText(
            text: TextSpan(
              text: 'Hello, ',
              style: DefaultTextStyle.of(context).style,
              children: [
                TextSpan(text: 'Flutter', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.blue)),
                TextSpan(text: '!', style: TextStyle(fontStyle: FontStyle.italic, color: Colors.red)),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

출력 결과: "Hello, Flutter!" 텍스트 중 "Flutter"는 굵고 파란색, "!"는 기울임꼴과 빨간색으로 스타일링됩니다.

예시: Theme

Theme 위젯은 앱 전체의 스타일을 정의하는 데 사용됩니다.


import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.green,
        textTheme: TextTheme(
          bodyText2: TextStyle(fontSize: 18, color: Colors.purple),
        ),
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Theme Example'),
        ),
        body: Center(
          child: Text('This is themed text'),
        ),
      ),
    );
  }
}

출력 결과: 전체 앱의 기본 텍스트 색상과 크기, 기본 색상이 변경됩니다.

 

08. 결론

1) Flutter 위젯을 활용한 앱 개발의 이점

Flutter는 강력하고 다양한 위젯을 제공하여 개발자가 복잡한 UI를 손쉽게 구축할 수 있게 합니다. Flutter 위젯을 활용하면 다음과 같은 이점을 얻을 수 있습니다.

  • 빠른 개발: Flutter의 위젯은 재사용이 가능하며, Hot Reload 기능을 통해 코드를 즉시 반영하여 빠르게 개발할 수 있습니다.
  • 일관된 UI: Flutter는 Android와 iOS 모두에서 동일한 코드베이스로 일관된 UI를 제공합니다.
  • 풍부한 위젯: Flutter는 다양한 기본 위젯과 머티리얼 디자인, iOS 스타일 위젯을 포함하여, 거의 모든 UI 요구사항을 충족할 수 있습니다.
  • 커스터마이징 가능성: Flutter 위젯은 매우 유연하며, 개발자가 필요에 따라 쉽게 커스터마이징할 수 있습니다.
  • 고성능: Flutter는 네이티브 성능을 제공하며, 복잡한 애니메이션과 그래픽을 부드럽게 처리할 수 있습니다.

2) 추가 학습 자료 및 참고 링크

Flutter를 더 깊이 이해하고 다양한 위젯을 활용하기 위해 다음의 자료를 참고하세요.

이와 같은 자료를 활용하면 Flutter의 다양한 위젯을 효과적으로 사용하고, 보다 복잡하고 매력적인 앱을 개발할 수 있습니다. Flutter 위젯을 마스터하여 앱 개발의 효율성과 성능을 높여보세요.


관련된 다른 글도 읽어보시길 추천합니다

 

2024.07.25 - [Study] - 28. Flutter로 사용자 인터페이스 구축하기 | Flutter

 

28. Flutter로 사용자 인터페이스 구축하기 | Flutter

Flutter로 사용자 인터페이스 구축하기: 기본 가이드 01. 서론1) Flutter의 인기와 장점Flutter는 Google에서 개발한 오픈 소스 UI 소프트웨어 개발 키트(SDK)입니다. Flutter의 가장 큰 장점 중 하나는 한 번

guguuu.com

2024.07.24 - [Study] - 27. Windows에서 Flutter로 Android 앱 개발 시작하기: 단계별 가이드 | Flutter

 

27. Windows에서 Flutter로 Android 앱 개발 시작하기: 단계별 가이드 | Flutter

Windows에서 Flutter로 Android 앱 개발 시작하기: 단계별 가이드 01. 서론1) Flutter와 Windows 환경에서의 개발Flutter는 Google에서 개발한 오픈소스 UI 소프트웨어 개발 키트로, 단일 코드베이스를 통해 iOS, A

guguuu.com

2024.07.23 - [Study] - 26. JavaScript 프레임워크 이해하기: React, Vue, Angular, Svelte, Ember | 웹 개발 기초

 

26. JavaScript 프레임워크 이해하기: React, Vue, Angular, Svelte, Ember | 웹 개발 기초

JavaScript 프레임워크: 클라이언트 사이드 개발의 모든 것JavaScript 프레임워크의 기본 개념과 주요 기능을 이해하고, 인기 있는 프레임워크들인 React, Ember, Vue, Svelte, Angular를 소개합니다. 01. JavaScri

guguuu.com


읽어주셔서 감사합니다

공감은 힘이 됩니다

 

:)

반응형

TOP

Designed by 티스토리