LoginSignup
53
30

More than 3 years have passed since last update.

【Flutter】StatefulWidget に引数(Parameter)を渡すには

Last updated at Posted at 2020-06-14

結論

コンストラクタによって引数を渡さず、
Stateオブジェクトに用意されているwidgetプロパティを利用して引数を取得する。

⭕️ Stateのbuildメソッド内部でwidget変数から値を受け取る
❌ StatefulWidgetcreateState()メソッド内で、Stateのコンストラクタに渡す(

実装

main.dart
import 'package:flutter/material.dart';

class Page extends StatefulWidget {

  final String param; //上位Widgetから受け取りたいデータ
  Page({this.param}); //コンストラクタ

  @override
  _PageState createState() => _PageState();
}

class _PageState extends State<Page> {
  @override
  Widget build(BuildContext context) {
    return Text(widget.param); // widget 変数からデータ取得可能
  }
}


理由

Flutter公式のドキュメントにStateオブジェクトのライフサイクルについての記載があります。

Stateオブジェクトの作成
BuildContextへの関連付け(マウント完了,BuildContextにアクセス可能となる)
initStateの呼び出し(呼び出された親のStatefulWidgetをwidgetプロパティに格納する)
→初期化完了(以後、Stateの変更によるWidgetツリーの再構築が可能になる。)

「コンストラクタを用いてはいけない」などの記載はありませんが、下記の理由からwidgetプロパティを使用すべきと考えます

・Flutterの機能としてwidgetプロパティが用意され、使用が想定されている(公式ドキュメントやTutorial動画全てこの方式)
・二重にParameterの記載をすると実装ミス・修正影響が増えるという設計上のリスクがある。

参照

How Stateful Widgets Are Used Best - Flutter Widgets 101 Ep. 2
State class - flutter.dev
Stack Overflow - Passing data to StatefulWidget and accessing it in it's state in Flutter

53
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
30