はじめに
freezedはエンティティクラスやJSONパーサを自動生成するFlutter/Dartプラグインです。
freezedでコード生成すると変数の型がInvalidTypeとなることがある
このfreezedですが、Dart3以降(Flutter3.10.0以降)で、freezedで生成されるユニオンタイプを変数に持つようなクラスを定義すると、その型がdynamic型として生成されてしまいます。
例えば以下のようなコードでは、変数page
はPage
ではなくInvalidType
という型で生成されます。
import 'package:freezed_annotation/freezed_annotation.dart';
part 'test.freezed.dart';
// WidgetTypeのユニオンタイプPageを変数にもつクラス
// 変数pageはPageではなくInvalidTypeという型で生成される
@freezed
class SinglePage with _$SinglePage {
factory SinglePage(Page page) = _SinglePage;
}
@freezed
class WidgetType with _$WidgetType {
const factory WidgetType.page() = Page;
}
解決方法
analyzerのバージョンを5.12.0までダウングレードすることがとりあえずのワークアラウンドとなるようです。
pubspec.yaml
で、以下のようanalyzerのバージョンをオーバーライドします。
dependency_overrides:
analyzer: 5.12.0
参考文献