警告「Optional Modifier parameter should have a default value of Modifier」の回避方法
あらすじ
Jetpack Compose の公式チュートリアル(インタラクティブな Dice Roller アプリを作成する)を進めていたら、以下の警告が出ました。
警告の翻訳: オプショナルの Modifier は初期値が「Modifier」であるべきです。
問題のあったコード
// サイコロコンポーザブル
@Composable
fun DiceWithButtonAndImage(
modifier: Modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center)
) {
// サイコロが振られた時の処理
// [省略]
}
Column(
modifier = modifier,
horizontalAlignment = Alignment.CenterHorizontally
) {
// [省略]
}
}
「初期値に Modifier 指定しとるやろがい!!公式チュートリアルのコードやぞ!!!」(← 間違ってます)
問題点
エラーの詳細を見てみたら、こんなことが書かれていました。
Optional Modifier parameter should have a default value of Modifier The first (or only) Modifier parameter in a Composable function should follow the following rules:
- Be named modifier
- Have a type of Modifier
- Either have no default value, or have a default value of Modifier
- If optional, be the first optional parameter in the parameter list
日本語訳するとこんなかんじ ↓
オプショナルの Modifier は初期値が「Modifier」であるべきです。 最初の(もしくは 1 つだけの)Modifier 引数は、以下のルールに従わなければなりません。
- 引数名が「modifier」であること
- Modifier 型で指定されていること
- 初期値が指定されていない、もしくは初期値は「Modifier」であること
- オプショナルなら、一番最初の引数として設定してあること
で、元のコードを見てみると・・・
// サイコロコンポーザブル
@Composable
fun DiceWithButtonAndImage(
modifier: Modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center)
) {
引数の中で Modifier にいろいろとメソッドを指定しているので、上記のルールの 3 番目「初期値が指定されていない、もしくは初期値は「Modifier」であること」に違反していますね。
おそらく素の Modifier しか指定しちゃダメということでしょう。
(また、仮に DiceWithButtonAndImage コンポーザブルを複数使う場合、呼び出す時に片方だけに Modifier メソッドを指定すると、引数内で指定したメソッドが全て上書きされてしまいます・・・参考)
解決策
// サイコロコンポーザブル
@Composable
fun DiceWithButtonAndImage(modifier: Modifier = Modifier) {
// サイコロが振られた時の処理
// [省略]
}
Column(
// カラムのレイアウト
modifier = modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center),
horizontalAlignment = Alignment.CenterHorizontally
) {
// [省略]
}
}
Modifier に指定するメソッドを引数内で指定するのではなく、modifier 引数を使うところでメソッドを指定してあげれば解決します。
🙂↕️最後まで読んでいただきありがとうございます🙂↕️