MENU
カテゴリー
\気になるカテゴリーをクリック!/
FlutterでStateless Widget、Stateful Widgetがよく分からない
ということで悩んでませんか?
そこで、今回はFlutterのStateless WidgetとStateful Widgetについてサンプルコードとデモ動画で解説します。
フリーランスのFlutterエンジニアとして働きたい方にオススメのエージェントはこちらで詳しく解説しています。
Stateless Widgetとは、状態(state)を持たないWidgetです。そのため、画面上の値を変更したくても、画面は再描画されません。
A widget that does not require mutable state.
(直訳)可変状態を必要としないウィジェット。
引用:Flutter公式サイト「Stateless Widget Class」
デモ動画の通りフローティングアクションボタンをクリックするとConsoleに数字が出力されます。乱数で0か1を出力する仕様です。コンソール上は数値は変わってますが、画面上のAPPBARでは数字は0のままとなり画面は再描画されません。
Stateless Widgetのサンプルコードは以下の通りです。そのままコピペで使えます。
StatelessWidgetクラスを継承したState Demoクラスを作成します。継承することで、Stateless Widgetのメソッドやフィールドにアクセスできます。オーバーライドする事で、クラス継承時に親クラスのメソッドと同じ名前のメソッドを子クラスで定義し直し、親クラスのメソッドではなく子クラスのメソッドが呼ばれます。
import 'package:flutter/material.dart';
import 'dart:math';
void main() => runApp(StatelessDemo());
class StatelessDemo extends StatelessWidget {
int chkNumber = 0;
Random rdmNumber = new Random();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('数字は ' + (chkNumber == 1 ? '1' : '0')),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.numbers_rounded),
onPressed: () {
chkNumber = rdmNumber.nextInt(2);
print(chkNumber);
},
),
),
);
}
}
メソッド名 | 内容 |
---|---|
build method | 画面を描画する |
Stateful Widgetとは、状態(state)を持つWidgetです。そのため、画面上の値を変更したい場合に画面を再描画できます。
A widget that has mutable state.
引用:Flutter公式サイト「Stateful Widget Class」
デモ動画の通りフローティングアクションボタンをクリックするとConsoleに数字が出力されます。乱数で0か1を出力する仕様です。コンソール上は数値は変わり、画面上も数字は変わります。
ちなみにコンソールでは初期処理が出力されてます。これはinitStateのメソッドを利用しているため、初めの処理時のみ動くStateのメソッドになります。
Stateful Widgetのサンプルコードは以下の通りです。コピペでそのまま動きます。
import 'package:flutter/material.dart';
import 'dart:math';
void main() => runApp(MyHomePage());
class MyHomePage extends StatefulWidget {
@override
State<MyHomePage> createState() => _StatefulDemo();
}
class _StatefulDemo extends State<MyHomePage> {
int chkNumber = 0;
Random rdmNumber = new Random();
@override
void initState() {
print("初期処理");
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('数字は ' + (chkNumber == 1 ? '1' : '0')),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.attach_money),
onPressed: () {
setState(() {
chkNumber = rdmNumber.nextInt(2);
});
print(chkNumber);
},
),
),
);
}
}
Stateful Widgetの主なメソッドは以下の通りです。
メソッド名 | 内容 |
---|---|
createState method | ウィジェットツリー内の特定の場所で、変更可能な状態を作成します。 |
initState method | Widgetの初期化時に一度だけ呼ばれるメソッドです。 |
setState method | 指定した状態(State)を更新させる処理です。 |
今回の記事では、Stateless WidgetとStateful Widgetについてサンプルコードとデモ動画で解説しました。
Flutterエンジニアになるには?
初心者が中級者レベルのFlutterエンジニアなるまでの進め方をまとめました。
Flutterの学習方法を知る
Flutter をスクールで学ぶ
Flutterの副業を探す
おまけ:Flutter入門の完全ガイド
Flutter/Dartの基礎一覧
Flutter/Dartの入門知識として押さえておきたい内容をまとめました。学習のご参考にどうぞ。
Widget(ウィジェット) 一覧
Dart 基本文法
ライブラリ 使い方
コメント