CupertinoPickerで選択するたびに発動するイベント(onSelectedItemChanged)はありますが、連続で発動するので負荷がかかる処理はしたくないところです。
Timerで選び終わった後に1回だけ発動させます。
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'dart:async';
//(略)
//Timerの設定
Timer selectTimer;
Timer _selectHandler() {
if (selectTimer != null) {
if (selectTimer.isActive) {
selectTimer.cancel();
}
}
return Timer(
const Duration(seconds: 1),
_select,
);
}
//最後に選択した1秒後に発動する
void _select() {
print(selectedArea);
}
//CupertinoPickerが入っているWidget
Widget _areaPicker(BuildContext context) {
return GestureDetector(
onTap: () {
_showDemoPicker(
context: context,
child: BottomPicker(
child: CupertinoPicker(
backgroundColor:
CupertinoColors.systemBackground.resolveFrom(context),
itemExtent: 30,
children: areaList.map(_pickerItem).toList(),
onSelectedItemChanged: (item) {
setState(() => selectedArea = areaList[item]);
selectTimer = _selectHandler();
},
),
),
);
},
child: Container(
margin: EdgeInsets.fromLTRB(0, 0, 0, 20),
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(5),
border: Border.all(color: Colors.black12)),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(selectedArea),
Icon(Icons.swap_vertical_circle, color: Colors.black45)
])),
);
}
//(略)