Flutter如何配置CupertinoPicker初始化选项?默认选中第二项的方法
Flutter CupertinoPicker 默认选中第二项的两种实现方式
要让CupertinoPicker默认选中第二项(索引为1,列表索引从0开始计数),主要有两种实现方式:
方式一:直接使用selectedItem参数
这是最简洁的实现方式,直接给CupertinoPicker添加selectedItem属性并设置为1即可:
showCupertinoModalPopup( context: context, builder: (c) { return SizedBox( height: 300, child: Material( child: CupertinoPicker( itemExtent: 60, selectedItem: 1, // 默认选中第二项(索引1) onSelectedItemChanged: (index) {}, children: List.generate( 30, (v) { return ListTile( title: const Text('data'), subtitle: Text('$v'), // 修正原代码变量名错误,用生成器参数v显示索引 ); }, ), ), ), ); }, );
方式二:使用FixedExtentScrollController
如果需要后续手动控制选中项、监听滚动状态等更灵活的操作,可以用FixedExtentScrollController初始化时指定初始选中索引:
showCupertinoModalPopup( context: context, builder: (c) { // 创建控制器,指定初始选中第二项(索引1) final pickerController = FixedExtentScrollController(initialItem: 1); return SizedBox( height: 300, child: Material( child: CupertinoPicker( itemExtent: 60, controller: pickerController, // 绑定控制器 onSelectedItemChanged: (index) {}, children: List.generate( 30, (v) { return ListTile( title: const Text('data'), subtitle: Text('$v'), ); }, ), ), ), ); }, );
补充说明:
- 原代码中
subtitle: Text('$c')存在变量名错误,c是builder的上下文参数,应该用列表生成器里的v来展示索引值。 - 若在StatefulWidget中使用控制器,需在
dispose()方法中调用pickerController.dispose()释放资源;但弹窗builder内创建的控制器会随弹窗关闭自动销毁,无需手动处理。
内容的提问来源于stack exchange,提问作者laterday
相关产品推荐
相关产品推荐

