티스토리 뷰
[1] 목표
Flutter의 텍스트에 Gradient 넣어주는 법을 알아보겠습니다.
Text의 TextStyle에는 foreground값을 지정해줄 수 있는데요..!!
타입은 Paint 입니다. 이 foreground값을 설정해줘서 Gradient Color를 줘보겠습니다.
[2] Paint 클래스
우선 Paint 클래스에 대해서 살펴봅시다.
Paint 클래스는 말그대로(?) drawing관련 클래스입니다.
그리고 Constructor는 딱 하나!
디폴트값으로 모든 프로퍼티가 설정되어있는 empty Paint object를 만들어주는 게 있습니다.
그래서 예를들어 이렇게 못쓰고
Paint(color: Colors.white); // 에러
Paint(Colors.white); // 에러
이렇게 써야합니다.
var paint = Paint();
paint.color = Colors.white;
대신에 다트의 .. (cascade notation) 을 이용해서
원하는 속성을 넣어준 Paint Object를 한줄로 만들 수 있습니다.
var paint = Paint()..color = Colors.white;
이렇게 여러 속성을 지정해줄 수도 있어요!
Paint()
..color = Colors.black
..style = PaintingStyle.stroke
..strokeWidth = 2.0;
그리고 프로퍼티로는 blendMode, Color 등등을 가지는데
이 중, 유심히 봐야할 것은 shader 프로퍼티 입니다..
Shader 클래스는 Gradient를 위한 클래스(?)라고 하네요.
[3] Gradient 클래스
우선 헷갈리면 안되는게..
Gradient 클래스는 두개가 있어요 😱
3.1 dart:ui 패키지의 Gradient 클래스
위의 Shader문서에 나와있는 Gradient는
dart:ui 패키지에 있는 Gradient 클래스 이고
Shader클래스를 상속받고 있습니다.
이 클래스는 color gradient를 render하기 위한 shader이고
세개의 Constructor를 가지고 있어요
linear, radial, sweep 세개가 어떻게 다른지는 아래에서 설명할게요-!
3.2 painting 패키지의 Gradient 클래스
그리고 Gradient 클래스가 하나 더 있는데,,
painting 패키지에 있는 Gradient 클래스입니다.
이 클래스는 추상클래스이고
아래 세개의 클래스가 Gradient를 상속받고 있습니다.
그리고 Gradient는 ⭐️createShader⭐️라는 메소드를 가지고 있습니다
그래서 dart:ui 패키지에 있는 Gradient 클래스 처럼 Shader 타입은 아니지만
이 메소드를 통해 Shader를 만들 수 있어요!!! (아래에서 예제를 추가할게요!)
3.3 linear, radial, sweep 차이
세개의 다른 점은 이 블로그 에 잘 나와있어요
위에서부터 Linear, Radial, Sweep 입니다!
3.4 예제 코드
LinearGradient를 만들어볼게요!
먼저 dart:ui 의 Gradient 클래스로 만들어볼게요
import 'dart:ui' as ui;
Widget gradientText() {
final Shader linearGradientShader = ui.Gradient.linear(Offset(0, 20), Offset(150, 20), [Colors.red, Colors.yellow]);
return Text('안녕하세요', style: TextStyle(foreground: Paint()..shader = linearGradientShader, fontSize: 80));
}
그 다음 painting의 Gradient 클래스로 만들어볼게요
(painting패키지를 따로 import안해줘도 되는 것을 보니까 material에 painting이 들어있나봐요)
import 'package:flutter/material.dart';
Widget gradientText() {
final Shader linearGradientShader = LinearGradient(colors: [Colors.red, Colors.yellow]).createShader(Rect.fromLTWH(0.0, 20.0, 150.0, 20.0));
return Text('안녕하세요', style: TextStyle(foreground: Paint()..shader = linearGradientShader, fontSize: 80));
}
'🤼♀️ > Flutter' 카테고리의 다른 글
[Flutter] 기기 정보, 앱 정보 구하기 (Device Info, App Info) (3) | 2021.03.02 |
---|---|
[Flutter] 이메일 보내기 (문의하기) (1) | 2021.03.02 |
[Flutter] iOS / 안드로이드 앱 배포하기 (4) | 2020.11.16 |
[Flutter] Firebase Dynamic Link 만들기 + 수신하기 (7) | 2020.11.13 |
[Flutter] 카카오톡으로 공유하기 (Kakao SDK의 Link Api 사용하기) (11) | 2020.11.11 |
- Total
- Today
- Yesterday
- Flutter 로딩
- flutter build mode
- Flutter getter setter
- Django Heroku Scheduler
- ribs
- Watch App for iOS App vs Watch App
- PencilKit
- 장고 URL querystring
- Dart Factory
- DRF APIException
- flutter dynamic link
- drf custom error
- 구글 Geocoding API
- Django Firebase Cloud Messaging
- METAL
- github actions
- cocoapod
- Flutter Clipboard
- 플러터 얼럿
- Sketch 누끼
- Django FCM
- flutter deep link
- flutter 앱 출시
- Flutter Spacer
- SerializerMethodField
- Flutter Text Gradient
- Python Type Hint
- ipad multitasking
- 장고 Custom Management Command
- 플러터 싱글톤
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |