Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Flutter の DropdownButton の項目を、他の状態に応じて変更する

More than 1 year has passed since last update.

setState で関連させたい状態の値を一緒に変更する

setState の中で変更したら良い。後は、build でその状態用のリストを動的に確保するだけ。
気付けば簡単。

ドロップダウンA に応じて、ドロップダウンB の項目を切り替える場合、以下のような感じ

  listForB() {
    return List.generate(stateB, (i) => i);  // stateB に応じてリストを作る
  }

  @override
  Widget build(BuildContext context) {
    var listA = listForA();
    var listB = listForB();
    // ... 中略 ...
      dropdownButton<_T>(
        value: stateA,
        onChanged: (newValue) {
          setState(() {
            stateA = newValue;
            // stateA で stateB を正規化などする
            // ここで選択肢に含まれるように修正する
            stateB = normalizedStateB(stateA);
          };
        },
        // ... 中略 ...
      ),
      dropdownButton<_T>(
        value: stateB,
        onChanged: (newValue) {
          setState(() {
            stateB = newValue;  // そもそも有効な値しか選択されないようになる
          };
        },
      // ... 以下略 ...

まだ、戯れているだけなので、効率がどうなのかはあまり気にしていない
listForA, listForB をキャッシュする必要があるかなど)。

onChanged を括り出したいのだけれど…

上記のように無名関数だと動くのに、State のメンバ関数にすると、下記のようなエラーが出ることが。

type 'int' is not a subtype of type 'String'

持ってるスコープの問題だったりするんだろうなぁ。この辺、setState の黒魔術がどうなっているのかほどかないと駄目そう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away