1.エラーメッセージ
Invalid use of a private type in a public API.
Try making the private type public, or making the API that uses the private type also be private.
2.問題点
一言でいうと、プライベートとパブリックの矛盾が発生している点が問題になっています。
_MyHomePageStateクラスがプライベート(アンダースコアで始まる)であるにも関わらず、
MyHomePageクラスがパブリックな状態になっています。
言い換えると、_MyHomePageStateクラス(プライベート定義)が、MyHomePage(パブリック定義)から使用されています。
さらに言い換えると、パブリックなクラスが、プライベートな設計方針のクラス内部で使用されている、という状態です。
結局のところ、外部から隠蔽したくて作成している(プライベート)クラスの内部に、パブリックなクラスがある、というのは、そもそもおかしい、というわけです。
上記の理由により、リント警告(library_private_types_in_public_api)が発生しています。
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<int> _items = List<int>.generate(10, (int index) => index);
3.修正方法
上記の理由から、解決するには、どちらかに統一する、ということになります。
以下の(1)修正案1では、「パブリックに統一する」方法です。
(2)修正案2では、逆に、「プライベートに統一する」方法になります。
(1)修正案1:
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<int> _items = List<int>.generate(10, (int index) => index);
↓
(修正案1)修正点:
・_MyHomePageState → MyHomePageState にする(3箇所)。
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
MyHomePageState createState() => MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
final List<int> _items = List<int>.generate(10, (int index) => index);
(2)修正案2:
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<int> _items = List<int>.generate(10, (int index) => index);
↓
(修正案2)修正点:
・MyHomePageState → _MyHomePageState にする(2箇所)。
・MyHomePage → _MyHomePage にする(3か所)。
・(補足)この場合、key の引き渡しは、要・不要は、今後の実装によります。しかし以下のコードにすると、今度は、リント警告(A value for optional parameter ‘key’ isn’t ever given.Try removing the unused parameter.)が発生しました。
もしこのリント警告も(現時点で)解消するのであれば、key は(ひとまず)削除する必要があります。
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: _MyHomePage(),
);
}
}
class _MyHomePage extends StatefulWidget {
const _MyHomePage({super.key});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<_MyHomePage> {
final List<int> _items = List<int>.generate(10, (int index) => index);