【お知らせ】みんプロ式Flutter講座は2026年4月末をもって新規販売を終了いたしました。詳しくはこちら →

[Flutter]「ValueChanged?(DropdownButton#onChanged属性)」にはなぜ「?」が2つあるのか?

このページには広告が含まれる場合があります。

 

Flutterで、下にベローンと表示される選択肢である「DropdownButton」というウィジェットがあります。

この「DropdownButton」内の選択肢が変更された際には、「onChanged」属性で設定したコールバック関数が呼ばれますが、

この「onChanged」属性のソースコードをみると、なんと「Null許容」を示す「?」が2つあって、「なんじゃこりゃぁ~!」という感じになっています。

「ValueChanged<T?>?」については

  1. ValueChanged? の部分と(1つめの「?」)
  2. <T?> の部分(2つめの「?」)

に分けて考えるとわかりやすくなります。

 

1つめの「?」(ValueChanged? の部分)は「ValueChangedがNullの可能性がある」

1つめの「?」(ValueChanged? の部分)は

ValueChangedがNullの可能性がある=onChanged属性がNullの可能性がある

という、Nullになる可能性があるものは型のうしろに「?」を つけるという、普通のNull許容の考え方と同じです。

 

2つめの「?」(<T?>)は「コールバック関数の引数がNullになる可能性がある」

一方、2つめの「?」の部分(<T?>)については、

onChanged属性のコールバック関数の引数がNullになる可能性がある

ことを意味しています。

つまり、ValueChangedはFunction(T value)であるため、その実態は引数が1つだけある関数を意味しており、Tは関数の引数の型として使われていることから、ValueChanged?の正しい理解は

  • ValueChangedは引数を1つだけ持つ関数(Function(T value))であり
  • 「T」はその関数に入れる引数(value)の型
  • その「T」に「?」がついているということは、関数の引数(value)がNullになるかもしれない

ということになります。

(詳しくは、以下の動画で解説していますので、よろしければご覧下さい)

こんな記事も読まれています

GAMBO(願望) 願望実現・目標達成の
17秒 / 68秒ワーク
GAMBO(願望) 引き寄せ難民だったぼくの挫折経験から生まれた誰でもできる願望実現サポートアプリ。かの有名な17秒/68秒ワークを独自の視覚化メソッドで簡単実践。
App Store / Google Play 詳しく見る →
Meiso(瞑想) 鐘音と自然音で
5分からのマインドフルネス
Meiso(瞑想) 初心者でも“迷わず続けられる”ことにこだわった、完全無料の瞑想アプリ。画面のガイドに従うだけで呼吸のリズムが整い、最短5分から瞑想を実践できます。
App Store / Google Play 詳しく見る →
小学生からの英検®単語 A ふりがな・音声付き
英検単語1日5分トレーニング
小学生からの英検®単語 ありそうでなかった!ふりがな付き英検®単語トレーニングアプリ!1日たった5分!スキマ時間を活用して、英検®頻出単語を効率的に習得。お子様の一人学習にも安心設計。
App Store / Google Play 詳しく見る →
オボエルンジャー レトロゲームで
nバック脳トレ
オボエルンジャー 科学的脳力開発法「Nバック課題」をファミコン風8bitレトロゲームにアレンジした新感覚脳トレアプリ。記憶力・感情コントロール力・集中力の向上に。
App Store / Google Play 詳しく見る →
ゴイコイコイ 超高速フラッシュカードで
語彙習得
ゴイコイコイ 日常語1400語を視覚的に学べる、高速読み上げフラッシュカード式の語彙トレーニングアプリ。知育教室で行われるフラッシュカード学習を、家庭で“手軽に・安価に・正確に”再現。
App Store / Google Play 詳しく見る →

TOP