####結論
コンストラクタによって引数を渡さず、
State
オブジェクトに用意されている**widget
プロパティを利用して引数を取得**する。
⭕️ State
のbuildメソッド内部でwidget
変数から値を受け取る
❌ StatefulWidget
のcreateState()
メソッド内で、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