MOB-LOG

モブおじの記録 (Programming, 統計・機械学習)

MapをMethodの引数にしようとしたときのnon_constant_default_value エラー: Map<String, dynamic> The default value of an optional parameter must be constant

関数、メソッドの引数に Map<String, dynamic> とか List <dynamic> とか与えたくなるけど、引数がOptionalの場合、適当に以下のように初期値を与えようとするとnon_constant_default_valueエラーになってしまう(”The default value of an optional parameter must be constant” とか言われて怒られる)。

void _function ( { Map<String, dynamic> map = {"value1": null} } ){
    // hoge
}

つまり初期値の {"value1": null} がconstじゃないから初期化できないよって話らしい。

解決策として、以下のようにMap<String, dynamic>型のconstメンバ_nullMapをクラスに追加して(もしくはdartファイル直下に定数として宣言する)、 _function( {Map<String, dynamic> **map = _nullMap**} ) {/* hoge */ } と初期値に使用する。

class HogeState extends State<HogeStatePage> {
  // final のデフォルト値を用意しておけば文句は言われない(正しい対処かどうかは不明)
  static const Map<String, dynamic> _nullJSON = {"recipe": null};
    
    @override
    void initState() {
    super.initState();
        // hogehoge
  }

    @override
    Widget build(BuildContext context) {
        /* hogehoge */
    }
    
    // const である _nullJSON で初期化
    _function( {Map<String, dynamic> json = _nullJSON} ) { 
        /* hogehoge */
    }
}