[障害対応]Invalid use of a private type in a public API.

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箇所)。

(修正案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);

(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 は(ひとまず)削除する必要があります。

(修正案2)修正後:
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);

コメントを残す