[Flutter]CupertinoPickerを動的に作るには?

Flutter

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

CupertinoPickerを動的に実装する方法を紹介します。

スポンサーリンク

方法

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

CupertinoPickerを動的に作るには、builderコンストラクタを使います。

まず、CupertinoPickerをCupertinoPicker.builderに置き換えます。

次に、CupertinoPicker.builderの引数「itemExtent」に要素の高さ、引数「onSelectedItemChanged」に値の更新をする関数を指定します。

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

そして、引数「childCount」に要素の数を指定します。

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

最後に、CupertinoPicker.builderの引数「itemBuilder」で要素を返す関数を指定します。

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

これでCupertinoPickerを動的に作ることが出来ます。

CupertinoPicker.builderの引数「itemBuilder」に指定する関数では、第2引数で要素のインデックスを格納しています。

使用例

以下は、使用例です。

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

class _MyHomePageState extends State<MyHomePage> {
  var _selectedValue = 2;
  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をコピーしました