<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://smwiki.info/index.php?action=history&amp;feed=atom&amp;title=%ED%94%8C%EB%9F%AC%ED%84%B0%3A%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC</id>
	<title>플러터:상태관리 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://smwiki.info/index.php?action=history&amp;feed=atom&amp;title=%ED%94%8C%EB%9F%AC%ED%84%B0%3A%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC"/>
	<link rel="alternate" type="text/html" href="https://smwiki.info/index.php?title=%ED%94%8C%EB%9F%AC%ED%84%B0:%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC&amp;action=history"/>
	<updated>2026-04-26T14:55:24Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://smwiki.info/index.php?title=%ED%94%8C%EB%9F%AC%ED%84%B0:%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC&amp;diff=10669&amp;oldid=prev</id>
		<title>Sam: /* StatefulWidget으로 관리 */</title>
		<link rel="alternate" type="text/html" href="https://smwiki.info/index.php?title=%ED%94%8C%EB%9F%AC%ED%84%B0:%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC&amp;diff=10669&amp;oldid=prev"/>
		<updated>2025-11-13T09:17:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;StatefulWidget으로 관리&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025년 11월 13일 (목) 09:17 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l73&quot;&gt;73번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;73번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;하지만, 위처럼 모든 상태에 대해 변수를 담아두면 너무 길어지기 때문에 특수한 페이지에서 관리되는 특수한 상태는 StatefulWidget을 사용하여 개별 클래스에서 관리한다.&amp;lt;syntaxhighlight lang=&amp;quot;dart&amp;quot;&amp;gt;class MyHomePage extends StatefulWidget {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;하지만, 위처럼 모든 상태에 대해 변수를 담아두면 너무 길어지기 때문에 특수한 페이지에서 관리되는 특수한 상태는 StatefulWidget을 사용하여 개별 클래스에서 관리한다.&amp;lt;syntaxhighlight lang=&amp;quot;dart&amp;quot;&amp;gt;class MyHomePage extends StatefulWidget {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   @override&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   @override&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   State&amp;lt;MyHomePage&amp;gt; createState() =&amp;gt; _MyHomePageState();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   State&amp;lt;MyHomePage&amp;gt; createState() =&amp;gt; _MyHomePageState(); &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; // 요 의미가 정확히 뭘까?&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;class _MyHomePageState extends State&amp;lt;MyHomePage&amp;gt; {&amp;lt;/syntaxhighlight&amp;gt;이런 식으로 상태클래스와 _로 시작되는 비공개 클래스로 나누어진다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;class _MyHomePageState extends State&amp;lt;MyHomePage&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  bool enabled = false;  // 여기에 선언되는 것들이 상태값이다. 이것들이 변경되면 다시 빌드.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  void changeCheck() {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    setState() {  // 이 함수의 내용이 끝나면 갱신된다.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      // 변경사항.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  }&lt;/ins&gt;&amp;lt;/syntaxhighlight&amp;gt;이런 식으로 상태클래스와 _로 시작되는 비공개 클래스로 나누어진다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff:1.41:old-10665:rev-10669:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
	<entry>
		<id>https://smwiki.info/index.php?title=%ED%94%8C%EB%9F%AC%ED%84%B0:%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC&amp;diff=10665&amp;oldid=prev</id>
		<title>Sam: 새 문서: {{플러터}}  == 개요 == 플러터는 특정 상태가 변하면 이를 다시 빌드하여 화면에 반영해주는 방식을 사용한다.  굉장히 다양한 방식이 있겠지만... 공식 문서에선 ChangeNotifier를 예시로 설명한다.  = ChangeNotifier = 상태를 특정 클래스에 저장해두었다가 다른 클래스에서 변경하여 사용하는 방식.&lt;syntaxhighlight lang=&quot;dart&quot;&gt;import &#039;package:english_words/english_words.dart&#039;; import &#039;package:flutt...</title>
		<link rel="alternate" type="text/html" href="https://smwiki.info/index.php?title=%ED%94%8C%EB%9F%AC%ED%84%B0:%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC&amp;diff=10665&amp;oldid=prev"/>
		<updated>2025-11-13T07:29:12Z</updated>

		<summary type="html">&lt;p&gt;새 문서: {{플러터}}  == 개요 == 플러터는 특정 상태가 변하면 이를 다시 빌드하여 화면에 반영해주는 방식을 사용한다.  굉장히 다양한 방식이 있겠지만... 공식 문서에선 ChangeNotifier를 예시로 설명한다.  = ChangeNotifier = 상태를 특정 클래스에 저장해두었다가 다른 클래스에서 변경하여 사용하는 방식.&amp;lt;syntaxhighlight lang=&amp;quot;dart&amp;quot;&amp;gt;import &amp;#039;package:english_words/english_words.dart&amp;#039;; import &amp;#039;package:flutt...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{플러터}}&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
플러터는 특정 상태가 변하면 이를 다시 빌드하여 화면에 반영해주는 방식을 사용한다.&lt;br /&gt;
&lt;br /&gt;
굉장히 다양한 방식이 있겠지만... 공식 문서에선 ChangeNotifier를 예시로 설명한다.&lt;br /&gt;
&lt;br /&gt;
= ChangeNotifier =&lt;br /&gt;
상태를 특정 클래스에 저장해두었다가 다른 클래스에서 변경하여 사용하는 방식.&amp;lt;syntaxhighlight lang=&amp;quot;dart&amp;quot;&amp;gt;import &amp;#039;package:english_words/english_words.dart&amp;#039;;&lt;br /&gt;
import &amp;#039;package:flutter/material.dart&amp;#039;;&lt;br /&gt;
import &amp;#039;package:provider/provider.dart&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
void main() {&lt;br /&gt;
  runApp(MyApp());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class MyApp extends StatelessWidget {&lt;br /&gt;
  const MyApp({super.key});&lt;br /&gt;
&lt;br /&gt;
  @override&lt;br /&gt;
  Widget build(BuildContext context) {&lt;br /&gt;
    return ChangeNotifierProvider(&lt;br /&gt;
      create: (context) =&amp;gt; MyAppState(),&lt;br /&gt;
      child: MaterialApp(&lt;br /&gt;
        title: &amp;#039;Namer App&amp;#039;,&lt;br /&gt;
        theme: ThemeData(&lt;br /&gt;
          colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepOrange),&lt;br /&gt;
        ),&lt;br /&gt;
        home: MyHomePage(),&lt;br /&gt;
      ),&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class MyAppState extends ChangeNotifier {&lt;br /&gt;
  var current = WordPair.random();&lt;br /&gt;
&lt;br /&gt;
  void getNext() {&lt;br /&gt;
    current = WordPair.random();&lt;br /&gt;
    notifyListeners();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class MyHomePage extends StatelessWidget {&lt;br /&gt;
  @override&lt;br /&gt;
  Widget build(BuildContext context) {&lt;br /&gt;
    var appState = context.watch&amp;lt;MyAppState&amp;gt;();  // 상태를 참고할 것 지정.&lt;br /&gt;
&lt;br /&gt;
    return Scaffold(&lt;br /&gt;
      body: Column(&lt;br /&gt;
        children: [Text(&amp;#039;A random AWESOME idea:&amp;#039;), Text(appState.current.asLowerCase),&lt;br /&gt;
        // ↓ Add this.&lt;br /&gt;
          ElevatedButton(&lt;br /&gt;
            onPressed: () {&lt;br /&gt;
              print(&amp;#039;button pressed!&amp;#039;);&lt;br /&gt;
              appState.getNext();&lt;br /&gt;
            },&lt;br /&gt;
            child: Text(&amp;#039;Next&amp;#039;),&lt;br /&gt;
          ),&lt;br /&gt;
&lt;br /&gt;
        ],&lt;br /&gt;
      ),&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# MyApp이 실행되는데, 노티파이어 프로바이더를 반환한다. 이 안에서 타이틀, 테마, home 등의 옵션을 갖는다.&lt;br /&gt;
# 여기서 반환되는 MyAppState는 노티파이어를 상속하여 만들어지며, 여기에서 변화가 생기면 다시 빌드가 이루어진다.&lt;br /&gt;
# MyHomePage 위젯에서 빌드할 때 MyAppState를 참고한다 지정되어, 여기에서 변화가 발생하면 이 위젯을 다시 빌드한다.&lt;br /&gt;
# 최종적으로, 버튼을 누르면 appState.getNext() 를 실행하며 appState 객체로 나타나는 MyAppState 내부 변수에 변화가 생기기 때문에 빌드를 다시 하여 화면이 갱신된다.&lt;br /&gt;
&lt;br /&gt;
== StatefulWidget으로 관리 ==&lt;br /&gt;
하지만, 위처럼 모든 상태에 대해 변수를 담아두면 너무 길어지기 때문에 특수한 페이지에서 관리되는 특수한 상태는 StatefulWidget을 사용하여 개별 클래스에서 관리한다.&amp;lt;syntaxhighlight lang=&amp;quot;dart&amp;quot;&amp;gt;class MyHomePage extends StatefulWidget {&lt;br /&gt;
  @override&lt;br /&gt;
  State&amp;lt;MyHomePage&amp;gt; createState() =&amp;gt; _MyHomePageState();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class _MyHomePageState extends State&amp;lt;MyHomePage&amp;gt; {&amp;lt;/syntaxhighlight&amp;gt;이런 식으로 상태클래스와 _로 시작되는 비공개 클래스로 나누어진다.&lt;/div&gt;</summary>
		<author><name>Sam</name></author>
	</entry>
</feed>