Flutterのconstコンストラクタについて

こんにちは。ニッパチです。
現在業務でFlutterでアプリを作成しており、dartのconstの挙動がいまいちわかっていなかったので
そのことについて書いていこうと思います。

constについて

変数宣言時のconstとインスタンス生成時のconstと2種類あります。
今回はこのうちインスタンス生成の挙動を調べていきます。

// 変数宣言
const hoge = 'hoge';

// インスタンス生成
var hoge = const Hoge(val: 'hoge');

class Hoge {
  const Hoge({required this.val});
  final String val;
}

疑問点

どのケースの時、constを付けるべきかがよくわかっていませんでした。

class Hoge {
  const Hoge({required this.val});
  final String val;
}

// ケース1 エラーじゃない
var hoge = const Hoge(val: 'hoge');

// ケース2 エラーじゃない
var hoge = Hoge(val: 'hoge');

// ケース3 エラー
final val = 'hoge';
var hoge = const Hoge(val: val);

// ケース4 エラーじゃない
final val = 'hoge';
var hoge = Hoge(val: val);
class Hoge {
  Hoge({required this.val}); // constがない
  final String val;
}

// ケース1 エラー
var hoge = const Hoge(val: 'hoge');

// ケース2 エラーじゃない
var hoge = Hoge(val: 'hoge');

// ケース3 エラー
final val = 'hoge';
var hoge = const Hoge(val: val);

// ケース4 エラーじゃない
final val = 'hoge';
var hoge = Hoge(val: val);

結果

上記を図にするとこんな感じ

実際の業務ではconstコンストラクタで引数が変数である場合によくエラーとなっていました。
再描画コストを考えてウィジェットはconstコンストラクタで定義した方が良いと色々な記事で見たので、脳死状態でconstを付けていましたが
考えてみると変数を渡していると実行時まで値が定まらないのでconstでインスタンス生成できないといったところでしょうか。
自分なり考えがすっきりして良かったです。