[Flutter]CupertinoPicker.builderを使うには?

Flutter

どうも、ちょげ(@chogetarou)です。

CupertinoPicker.builderを使う方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

CupertinoPicker.builderを使うには、次の4つの引数を使います。

  • itemBuilder : 1つ1つの要素を返す関数
  • childCount : 要素の数
  • itemExtent : 要素の高さ
  • onSelectedItemChanged : 要素が変更された時に値を更新する処理

まず、値を保持する変数を用意します。

var _selectedValue = 0;

次に、CupertinoPicker.builderの引数「itemExtent」に要素の高さ、引数「childCount」に要素の数を指定します。

そして、引数「onSelectedItemChanged」には、要素が変更された時に変数を更新する処理を指定します。

CupertinoPicker.builder(
  childCount: /*要素の数*/,
  itemExtent: /*要素の高さ*/,
  onSelectedItemChanged: (newValue) {
    setState(() {
      _selectedValue = newValue;
    });
  },
),

最後に、引数「itemBuilder」に1つ1つの要素を返す関数を指定します。

CupertinoPicker.builder(
  childCount: _fruits.length,
  itemExtent: 30,
  onSelectedItemChanged: (newValue) {
    setState(() {
      _selectedValue = newValue;
    });
  },
  itemBuilder: (context, index) {
    return Item();
  },
),

4つの引数を使えば、CupertinoPicker.builderを使うことが出来ます。

CupertinoPicker.builderの引数「itemBuilder」には、「Widget Function(BuildContext, int)」のような関数を指定します。

関数の第2引数では、要素のインデックスが格納されます。

使用例

以下は、使用例です。

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var _selectedValue = 0;
  final _fruits = [
    "Apple",
    "Banana",
    "StrawBerry",
    "Orange",
    "Watermelon",
  ];
  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: CupertinoPageScaffold(
        child: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Text('${_fruits[_selectedValue]}'),
              Container(
                height: 200,
                child: CupertinoPicker.builder(
                  childCount: _fruits.length,
                  itemExtent: 30,
                  onSelectedItemChanged: (newValue) {
                    setState(() {
                      _selectedValue = newValue;
                    });
                  },
                  itemBuilder: (context, index) {
                    return Text(_fruits[index]);
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

コメント

タイトルとURLをコピーしました