
import 'package:flutter/material.dart';
import 'package:first_app/gradient_container.dart';
void main() {
runApp(
const MaterialApp(
home: Scaffold(
body: GradientContainer.purple(),
),
),
);
}
https://landroid.tistory.com/11
(너무나 잘 정리된 글이 있어서 대체...)
여튼 중요한 것은
1. 외부 패키지 추가(dependencies)
2. 이미지 등 에셋 추가(asset)
시 이 파일에 업데이트를 반드시 해주어야 된다는 것...!
정의부(define)과 선언부(excution)으로 구분,
하나의 기능을 담당
Widget TREE라고 함Flutter Widget Catalog: https://docs.flutter.dev/ui/widgets
StatelessWidget를 재정의하여 StyledText을 구성둘의 차이는... https://velog.io/@ruinak_4127/Dart-final%EA%B3%BC-const%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://80000coding.oopy.io/9fa8948a-f7f7-4518-9515-ba6301c67c28
메모리 최적화 관점에서 사용하는 것.
final로 하나로 통일해서 쓰면 편하겠지만, 메모리 성능에서의 차이가 발생함.
const로 정의시 컴파일 타임에 결정되기 때문에 앱을 생성할때 한번만 생성하게됨.
따라서 UI 업데이트를 통한 리렌더링시 항상 동일한 내용을 출력하는 경우에는 const를 활용하여 재생성을 막아 내부 리소스 낭비를 막아주는 목적
class DiceRoller extends StatefulWidget {
const DiceRoller({super.key});
State<DiceRoller> createState() {
return _DiceRollerState();
}
}
class _DiceRollerState extends State<DiceRoller> {
var currentDiceRoll = 2;
void rollDice() {
setState(() {
currentDiceRoll = randomizer.nextInt(6) + 1;
});
}
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Image.asset(
'assets/images/dice-$currentDiceRoll.png',
width: 200,
),
const SizedBox(height: 20),
TextButton(
onPressed: rollDice,
style: TextButton.styleFrom(
// padding: const EdgeInsets.only(
// top: 20,
// ),
foregroundColor: Colors.white,
textStyle: const TextStyle(fontSize: 28)),
child: const Text('Roll Dice'),
)
],
);
}
}