2일차 과제

김태원·2023년 3월 23일
0

Dart

목록 보기
5/5
  1. Generic에 대해 정리하고 링크를 입력해주세요.
  • 다트(Dart) 언어에서 Generic은 타입 파라미터(type parameter)를 사용하여, 코드의 재사용성과 타입 안정성을 개선하는 기능이다
  • Generic은 컬렉션, 함수, 클래스 등에서 사용할 수 있다
  1. Flutter의 렌더링 원리에 대해 정리하고 링크를 입력해주세요.
    Flutter의 렌더링 원리는 크게 다음과 같은 과정으로 이루어집니다.
  • Widget 트리 생성
    Flutter 애플리케이션은 위젯 트리로 구성됩니다. 위젯은 UI 구성 요소를 정의하며, 일반적으로 트리 구조로 구성됩니다. 위젯은 불변 객체로, 한 번 생성되면 수정될 수 없다

  • 레이아웃
    위젯 트리가 생성되면 Flutter는 해당 트리의 각 위젯에 대해 레이아웃을 수행합니다. 레이아웃은 각 위젯의 크기, 위치 및 레이아웃 제약 조건을 결정합니다. Flutter는 위젯의 레이아웃을 계산하기 위해 "flex" 레이아웃 알고리즘을 사용한다

  • 그리기
    레이아웃 단계 이후에는 Flutter가 Skia를 사용하여 화면에 위젯을 그립니다. 이 단계에서 Skia는 위젯의 레이아웃 정보를 사용하여 텍스트, 이미지, 도형 및 다른 그래픽 요소를 그린다

  • 업데이트
    위젯 트리의 상태가 변경되면 Flutter는 레이아웃 및 그리기 단계를 반복하여 변경된 위젯만 다시 그립니다. 이를 통해 애플리케이션의 성능을 향상시킬 수 있다

3-1. 하나의 Text 위젯으로만 완성해보세요. (최소 4문단 이상)

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text("사랑을 다해 사랑을 하였노라고\n"
              "정작 해야 할 말이 남아 있었음을 알았을 때\n"
              "당신은 이미 남의 사람이 되어 있었다\n"
              "\n"
              "불러야 할 뜨거운 노래를 가슴으로 죽이고\n"
              "당신은 멀리 이루어지고 있었다\n"
              "\n"
              "하마 곱스런 눈 웃음이 사라지기 전\n"
              "두고두고 아름다움으로 잊어 달라지만\n"
              "남자에게서 여자란 기쁨 아니면 슬픔\n"
              "\n"
              "다섯 손가락 끝을 잘라 핏물 오선을 그려\n"
              "혼자라도 외롭지 않을 밤에 울어보리라\n"
              "\n"
              "울어서 멍든 눈흘김으로\n"
              "미워서 미워지도록 사랑하리라\n"
              "\n"
              "한 잔은 떠나버린 너를 위하여\n"
              "또 한 잔은 너와의 영원한 사랑을 위하여\n"
              "그리고 또 한 잔은 이미 초라해진 나를 위하여\n"
              "마지막 한 잔은 미리 알고 정하신 하나님을 위하여"),
        ),
      ),
    );
  }
}

3-2. 하나의 Text 위젯에 속성을 추가해서 완성해보세요. (색상, 크기 자유)

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(
      home: Scaffold(
          body: Text(
              "사랑을 다해 사랑을 하였노라고\n"
              "정작 해야 할 말이 남아 있었음을 알았을 때\n"
              "당신은 이미 남의 사람이 되어 있었다\n"
              "\n"
              "불러야 할 뜨거운 노래를 가슴으로 죽이고\n"
              "당신은 멀리 이루어지고 있었다\n"
              "\n"
              "하마 곱스런 눈 웃음이 사라지기 전\n"
              "두고두고 아름다움으로 잊어 달라지만\n"
              "남자에게서 여자란 기쁨 아니면 슬픔\n"
              "\n"
              "다섯 손가락 끝을 잘라 핏물 오선을 그려\n"
              "혼자라도 외롭지 않을 밤에 울어보리라\n"
              "\n"
              "울어서 멍든 눈흘김으로\n"
              "미워서 미워지도록 사랑하리라\n"
              "\n"
              "한 잔은 떠나버린 너를 위하여\n"
              "또 한 잔은 너와의 영원한 사랑을 위하여\n"
              "그리고 또 한 잔은 이미 초라해진 나를 위하여\n"
              "마지막 한 잔은 미리 알고 정하신 하나님을 위하여",
              style: TextStyle(color: Colors.purple))),
    );
  }
}

3-3. RichText 위젯을 사용하여 완성해보세요. (단, Text 위젯 사용불가, 색상 4가지 이상)
Text 위젯은 사용불가인데, 이건 잘모르겠습니다 ㅠㅠ..

  1. CircleAvatar 위젯을 사용하여 아래의 이미지와 동일한 결과물을 만들고, 이를 만들기 위한 전체 코드를 작성하세요.( 색상, 그림자 자유, 사용한 icon 이름 : ac_unit_rounded, )
import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              width: 200,
              height: 200,
              child: CircleAvatar(
                backgroundColor: Colors.blue[800],
                child: Icon(
                  Icons.ac_unit_rounded,
                  size: 100,
                ),
              ),
            ),
          ],
        ),
      ),
    ),
  ));
}
profile
개발자 입니다

0개의 댓글