はじめに
今回はStatefulWidgetを使うときの実際の手順について書いていきたいと思います。
StatefulWidget
とは短くまとめると状態を持つウィジェットのことです。
これの使い方をライフサイクルを交えながら備忘録の意味合いのかねて書き残しておきます。
StatefulWidgetクラスを継承したクラスの作成(必須)
class FirstPage extends StatefulWidget{ @override FirstPageState createState() => new FirstPageState(); }
プロパティを持たせる(任意)
StatefulWidgetクラスにプロパティ・コンストラクタを持たせたいときは以下のようにします。
class FirstPage extends StatefulWidget{ // コンストラクタ FirstPage({Key key, this.message}) : super(key: key); // フィールド final String message; @override FirstPageState createState() => new FirstPageState(); }
Stateを継承したクラスを作成する(必須)
buildメソッド
を実装しなければならないところと、setStateメソッド
により再描画できることが大切。
class FirstPageState extends State<FirstPage>{ int _counter = 0; // これは必ず実装しなければならない @override Widget build(BuildContext context){ return Center( child: GestureDetector( onTap: (){ // 再描画する setState((){ _counter++; }); }, child: Text('${widget.message}\n$_counter'), ), ); } }
ライフサイクルを使う(任意)
class FirstPageState extends State<FirstPage>{ int _counter = 0; // エレメントをツリーに追加したときに呼ばれる @override void initState(){ super.initState(); } // initStateメソッドが呼ばれた直後 @override void didChangeDependencies(){ super.didChangeDependencies(); } // これは必ず実装しなければならない @override Widget build(BuildContext context){ return Center( child: GestureDetector( onTap: (){ // 再描画する setState((){ _counter++; }); }, child: Text('${widget.message}\n$_counter'), ), ); } // リビルド時に呼ばれる @override void didUpdateWidget(FirstPage oldWidget){ super.didUpdateWidget(oldWidget); } // ウィジェットが破棄されたときに呼ばれる @override void dispose(){ super.dispose(); } }
さいごに
StatelessWidget
よりも少し難しいと思うので、まとめてみました。
まだFlutterを触り始めたばかりですが、想像以上に面白くて当分はFlutter関係の記事が続くかもです。
ではまた。