<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>StatefulWidget</title>
	<atom:link href="https://techgrowup.net/tag/statefulwidget/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Mon, 02 Sep 2024 18:54:15 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>StatefulWidget</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Flutter開発入門11 StatefulWidgetとは</title>
		<link>https://techgrowup.net/flutter-stateful-widget/</link>
					<comments>https://techgrowup.net/flutter-stateful-widget/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Mon, 02 Sep 2024 18:54:14 +0000</pubDate>
				<category><![CDATA[Flutter]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Dart]]></category>
		<category><![CDATA[StatefulWidget]]></category>
		<category><![CDATA[アプリ開発]]></category>
		<category><![CDATA[状態管理]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=1746</guid>

					<description><![CDATA[はじめに 　Flutterを使ってアプリケーションを開発する際、ユーザーの操作やデータの変更に応じてUIが変化するコンポーネントを作成する必要があります。そのために使われるのがStatefulWidgetです。本記事では [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">はじめに</h1>



<p class="wp-block-paragraph">　Flutterを使ってアプリケーションを開発する際、ユーザーの操作やデータの変更に応じてUIが変化するコンポーネントを作成する必要があります。そのために使われるのが<code>StatefulWidget</code>です。本記事では、<code>StatefulWidget</code>の基本的な使い方や実際の活用方法について、わかりやすく解説します。</p>



<h2 class="wp-block-heading">StatefulWidgetとは</h2>



<p class="wp-block-paragraph">　<code>StatefulWidget</code>は、Flutterにおける状態を持つウィジェットです。<code>StatelessWidget</code>と異なり、<code>StatefulWidget</code>はその状態が変わるたびに再描画され、動的なUIを提供します。たとえば、ボタンを押すとテキストが変わる、フォームに入力するたびに内容が更新されるといったシナリオで使用されます。</p>



<h3 class="wp-block-heading">StatefulWidgetの基本構造</h3>



<p class="wp-block-paragraph">　<code>StatefulWidget</code>を使って、ボタンを押すたびにテキストが変わる簡単な例を見てみましょう。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('StatefulWidget Example'),
        ),
        body: Center(
          child: MyStatefulWidget(),
        ),
      ),
    );
  }
}

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() =&gt; _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State&lt;MyStatefulWidget&gt; {
  String _displayText = 'Hello, Tech Grow Up!';

  void _updateText() {
    setState(() {
      _displayText = 'ボタンが押された!';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text(
          _displayText,
          style: const TextStyle(fontSize: 24),
        ),
        const SizedBox(height: 20),
        ElevatedButton(
          onPressed: _updateText,
          child: const Text('押してね'),
        ),
      ],
    );
  }
}" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">import</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;package:flutter/material.dart&#39;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">main</span><span style="color: #D4D4D4">() {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #DCDCAA">runApp</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">MyApp</span><span style="color: #D4D4D4">());</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MyApp</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">extends</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">StatelessWidget</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">@override</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #4EC9B0">Widget</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">build</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">BuildContext</span><span style="color: #D4D4D4"> context) {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MaterialApp</span><span style="color: #D4D4D4">(</span></span>
<span class="line"><span style="color: #D4D4D4">      home: </span><span style="color: #4EC9B0">Scaffold</span><span style="color: #D4D4D4">(</span></span>
<span class="line"><span style="color: #D4D4D4">        appBar: </span><span style="color: #4EC9B0">AppBar</span><span style="color: #D4D4D4">(</span></span>
<span class="line"><span style="color: #D4D4D4">          title: </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Text</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;StatefulWidget Example&#39;</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">        ),</span></span>
<span class="line"><span style="color: #D4D4D4">        body: </span><span style="color: #4EC9B0">Center</span><span style="color: #D4D4D4">(</span></span>
<span class="line"><span style="color: #D4D4D4">          child: </span><span style="color: #4EC9B0">MyStatefulWidget</span><span style="color: #D4D4D4">(),</span></span>
<span class="line"><span style="color: #D4D4D4">        ),</span></span>
<span class="line"><span style="color: #D4D4D4">      ),</span></span>
<span class="line"><span style="color: #D4D4D4">    );</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MyStatefulWidget</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">extends</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">StatefulWidget</span><span style="color: #D4D4D4"> {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">@override</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #4EC9B0">_MyStatefulWidgetState</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">createState</span><span style="color: #D4D4D4">() =&gt; </span><span style="color: #4EC9B0">_MyStatefulWidgetState</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">_MyStatefulWidgetState</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">extends</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">State</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">MyStatefulWidget</span><span style="color: #D4D4D4">&gt; {</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #4EC9B0">String</span><span style="color: #D4D4D4"> _displayText = </span><span style="color: #CE9178">&#39;Hello, Tech Grow Up!&#39;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_updateText</span><span style="color: #D4D4D4">() {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">setState</span><span style="color: #D4D4D4">(() {</span></span>
<span class="line"><span style="color: #D4D4D4">      _displayText = </span><span style="color: #CE9178">&#39;ボタンが押された!&#39;</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    });</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">@override</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #4EC9B0">Widget</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">build</span><span style="color: #D4D4D4">(</span><span style="color: #4EC9B0">BuildContext</span><span style="color: #D4D4D4"> context) {</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Column</span><span style="color: #D4D4D4">(</span></span>
<span class="line"><span style="color: #D4D4D4">      mainAxisAlignment: </span><span style="color: #4EC9B0">MainAxisAlignment</span><span style="color: #D4D4D4">.center,</span></span>
<span class="line"><span style="color: #D4D4D4">      children: [</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #4EC9B0">Text</span><span style="color: #D4D4D4">(</span></span>
<span class="line"><span style="color: #D4D4D4">          _displayText,</span></span>
<span class="line"><span style="color: #D4D4D4">          style: </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">TextStyle</span><span style="color: #D4D4D4">(fontSize: </span><span style="color: #B5CEA8">24</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">        ),</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">SizedBox</span><span style="color: #D4D4D4">(height: </span><span style="color: #B5CEA8">20</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #4EC9B0">ElevatedButton</span><span style="color: #D4D4D4">(</span></span>
<span class="line"><span style="color: #D4D4D4">          onPressed: _updateText,</span></span>
<span class="line"><span style="color: #D4D4D4">          child: </span><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Text</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&#39;押してね&#39;</span><span style="color: #D4D4D4">),</span></span>
<span class="line"><span style="color: #D4D4D4">        ),</span></span>
<span class="line"><span style="color: #D4D4D4">      ],</span></span>
<span class="line"><span style="color: #D4D4D4">    );</span></span>
<span class="line"><span style="color: #D4D4D4">  }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">解説</h3>



<ul class="wp-block-list">
<li><strong><code>MyApp</code>クラス</strong>: <code>MaterialApp</code>と<code>Scaffold</code>を使って基本的なアプリケーション構造を定義します。</li>



<li><strong><code>MyStatefulWidget</code>クラス</strong>: <code>StatefulWidget</code>を継承したウィジェットです。このウィジェットは状態を持ち、ユーザーの操作に応じてUIが変化します。</li>



<li><strong><code>_MyStatefulWidgetState</code>クラス</strong>: ここで状態（<code>_displayText</code>）を定義し、<code>setState</code>メソッドを使って状態を更新します。ボタンが押されるとテキストが変わる仕組みです。</li>
</ul>



<p class="wp-block-paragraph">この例では、ボタンを押すと表示されるテキストが「ボタンが押された!」に変わります。<code>StatefulWidget</code>を使うことで、ユーザーの操作に応じて動的にUIを変更することが可能です。</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="flutter stateful video" width="1256" height="707" src="https://www.youtube.com/embed/1DALRjLHYw0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">StatefulWidgetの活用シーン</h2>



<p class="wp-block-paragraph">　<code>StatefulWidget</code>は、次のようなシーンで役立ちます。</p>



<ol class="wp-block-list">
<li><strong>ユーザー入力の管理</strong>: フォームやチェックボックス、スライダーなど、ユーザーの入力や選択に応じてUIが変わる要素を管理するために使用します。</li>



<li><strong>アニメーション</strong>: アニメーションの状態管理や、時間経過に応じて変化するUIを実現するために活用されます。</li>



<li><strong>カウンターやインクリメント</strong>: ボタンをクリックして数値を増やすようなインタラクティブな要素に最適です。</li>



<li><strong>タブやページナビゲーション</strong>: 複数のページやタブを持つアプリケーションで、ユーザーの操作に応じて状態を保持し、ページ間のデータを管理します。</li>
</ol>



<h2 class="wp-block-heading">StatefulWidgetのメリットと注意点</h2>



<h3 class="wp-block-heading">メリット</h3>



<ul class="wp-block-list">
<li><strong>動的なUIの実現</strong>: ユーザーの操作やデータの変更に応じて、リアルタイムにUIを更新できるため、インタラクティブなアプリケーションを構築するのに最適です。</li>



<li><strong>状態管理の簡便さ</strong>: <code>StatefulWidget</code>は、内部で状態を管理するため、UIの一部だけを効率的に更新することができます。</li>
</ul>



<h3 class="wp-block-heading">注意点</h3>



<ul class="wp-block-list">
<li><strong>パフォーマンスに注意</strong>: 状態が頻繁に変わる複雑なウィジェットツリーを持つアプリケーションでは、適切に<code>setState</code>を管理しないとパフォーマンスが低下する可能性があります。</li>



<li><strong>状態のリセット</strong>: <code>StatefulWidget</code>の状態がリセットされることがあり、アプリケーションの設計によっては意図しない動作を引き起こすことがあります。そのため、状態の管理方法には注意が必要です。</li>
</ul>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">　<code>StatefulWidget</code>は、Flutterで動的なUIコンポーネントを作成する際に欠かせないクラスです。状態を持たないシンプルな<code>StatelessWidget</code>とは異なり、<code>StatefulWidget</code>はユーザーの操作やデータの変化に応じてUIをリアルタイムに更新することができます。Flutterアプリの中でインタラクティブな要素を作成したい場合、<code>StatefulWidget</code>を効果的に活用することが成功への鍵となります。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/flutter-stateful-widget/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: techgrowup.net @ 2026-07-09 17:39:22 by W3 Total Cache
-->