immutable 은 속성을 변경할 없는 것을 말하는 것이다. Stateless Widget 위젯은 값이 최종값이 되는 것이다.
상대적으로 Stateful widgets 위젯들은 위젯이 메모리에 살아있는 동안은 그 상태가 유지된다.
Stateful widget를 구현하기 위해서는 최소한 두개의 클래스가 필요하다.
Stateful widget 자체는 immutable하지만 객체가 생성되는 시점에서 State Class를 생성하고 위젯이 메모리에 상주해 있는 동안 그 속성값을 변경할 수 있다.
RandowWords 라는 Stateful widget 를 만들것이다. RandomWords는 자체적으로 RandomWOrdsState 클래스를 가지고 있다. RandowWords 를 사용하며 MyApp Stateless widget 안에 존재한다.
1. main.dart 파일 아래에 State를 만들어라.
class RandomWordsState extends State<RandomWords> { // TODO Add build() method }
State<Randomwords> 클래스에 일반적인 값들과 로직을 저장하게 되어 있다. 이것은 RandomWords의 상태를 관리 한다.
이 클래스는 무한스콜로 기능과 좋아요 기능을 담당한다.
RandomWordsState 는 RandomWords 클래스에 의존한다.
2. RandomWords 위젯을 추가해라. RandomWords 위젯을 추가하면 자기자신 옆에 상태 클래스 만든다.
class RandomWords extends StatefulWidget { @override RandomWordsState createState() => new RandomWordsState(); }
3. build() 메소드를 RandomWordsState 에 추가하라.
class RandomWordsState extends State<RandomWords> { @override Widget build(BuildContext context) { final wordPair = WordPair.random(); return Text(wordPair.asPascalCase); } }
4. 만든 클래스로 랜덤값을 변경하라.
import 'package:flutter/material.dart'; import 'package:english_words/english_words.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('Stateful Widget 추가하기'), ), body: Center( child: RandomWords(), ), ), ); } } class RandomWordsState extends State<RandomWords> { // TODO Add build() method @override Widget build(BuildContext context) { final wordPair = WordPair.random(); return Text(wordPair.asPascalCase); } } class RandomWords extends StatefulWidget { @override RandomWordsState createState() => new RandomWordsState(); }
5. 앱을 다시 배포하면 기존과 동일하지만 앱을 리로딩할 할때마다 단어가 변경되는 것을 확인할 수 있을 것 이다.