Flutterにて「All final variables must be initialized, but ‘child’ isn’t.」のエラーが出た時の解決法

Flutter
 

出力されているエラー

以下のメッセージのエラーが出力されている

All final variables must be initialized, but 'child' isn't.
Try adding an initializer for the field.

childという引数があるもののそれが初期化(つまり代入)されていないためにエラーが出力されている

問題のコードはこちらであり、
このコード自体はTextFieldContainerというカスタムウィジェットがあり、引数のchildをbuildにて中央揃え(center)かつコンテナ化(container)しています。

import 'package:flutter/material.dart';

class TextFieldContainer extends StatelessWidget {
  const TextFieldContainer({super.key, required child});
  final Widget child;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: child,
      ),
    );
  }
}

解決法

以下のようにchildに対してthisをつけてあげることが必要です。

class TextFieldContainer extends StatelessWidget {
  const TextFieldContainer({super.key, required this.child});
  final Widget child;

なぜなら引数として受け取ったchildをclass自身のchildに代入してあげる必要があるからです。

逆に言えば、childに代入されないまま、このコードが動かない理由はContainerにあるchildが未定義のままだとCotainer内の表示ができないからです。

ちなみにthisについて補足しておくと、
そのclass自身であるということです。

つまりfinal Widget childを指しているということです。

コメント

タイトルとURLをコピーしました